uniapp如何设置缓存过期时间
在uniapp中如何给本地缓存设置过期时间?比如使用uni.setStorage存储数据后,希望数据在一定时间后自动失效,应该怎么实现?
2 回复
在uniapp中,缓存本身没有直接设置过期时间的方法。可以通过存储时间戳实现:存数据时同时记录时间,读取时判断是否过期。例如,存储时加上时间戳,读取时检查当前时间与存储时间的差值,若超过设定时间则清除缓存并重新获取。
在 UniApp 中,设置缓存过期时间需要手动实现,因为 UniApp 的本地存储(如 uni.setStorageSync)本身不提供自动过期功能。以下是实现方案:
方法一:手动存储时间戳
- 存储数据时,同时保存当前时间戳和过期时间。
- 读取数据时,检查当前时间是否超过过期时间,若过期则删除数据并返回空。
示例代码:
// 设置缓存,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。
此方案简单有效,适用于大部分缓存过期场景。

