uniapp如何设置缓存过期时间

在uniapp中如何给本地缓存设置过期时间?比如使用uni.setStorage存储数据后,希望数据在一定时间后自动失效,应该怎么实现?

2 回复

在uniapp中,缓存本身没有直接设置过期时间的方法。可以通过存储时间戳实现:存数据时同时记录时间,读取时判断是否过期。例如,存储时加上时间戳,读取时检查当前时间与存储时间的差值,若超过设定时间则清除缓存并重新获取。


在 UniApp 中,设置缓存过期时间需要手动实现,因为 UniApp 的本地存储(如 uni.setStorageSync)本身不提供自动过期功能。以下是实现方案:

方法一:手动存储时间戳

  1. 存储数据时,同时保存当前时间戳和过期时间。
  2. 读取数据时,检查当前时间是否超过过期时间,若过期则删除数据并返回空。

示例代码

// 设置缓存,expireTime 为过期时间(单位:毫秒)
function setCache(key, data, expireTime) {
  const cacheData = {
    data: data,
    expireTime: Date.now() + expireTime
  };
  uni.setStorageSync(key, JSON.stringify(cacheData));
}

// 获取缓存
function getCache(key) {
  const cacheStr = uni.getStorageSync(key);
  if (!cacheStr) return null;
  
  const cacheData = JSON.parse(cacheStr);
  if (Date.now() > cacheData.expireTime) {
    uni.removeStorageSync(key); // 过期删除
    return null;
  }
  return cacheData.data;
}

// 使用示例
setCache('userInfo', {name: '张三'}, 60 * 60 * 1000); // 缓存1小时
const userInfo = getCache('userInfo');

方法二:使用定时器清理(不推荐)

通过 setTimeout 设置延时删除,但应用关闭后定时器失效,可靠性低。

注意事项

  • 存储限制:本地存储大小通常约 10MB,避免存储过大数据。
  • 数据类型:存储前用 JSON.stringify 转换对象,读取时用 JSON.parse 解析。
  • 同步/异步:示例使用同步方法(如 setStorageSync),异步方法可用 uni.setStorage

此方案简单有效,适用于大部分缓存过期场景。

回到顶部