前言
先来看看官方文档
wx.setStorageSync(string key, any data)
将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。
注意:需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象。
很遗憾没有过期时间设置, 如果有数据更新, 则需要重新清除本地缓存
我们可以自己写缓存过期逻辑。 思路:在保存对象时, 同时保存一个对象,用于判断过期时间
一、设置缓存
this.SetCache = function (key, data, milliseconds) {
if (milliseconds && milliseconds > 0) {
var curTime = new Date();
let cacheDateList = []; //时间缓存对象数组,便于后面Get时批量处理过期缓存
cacheDateList = wx.getStorageSync('cacheDataList');
if (!cacheDateList || cacheDateList.length == 0) {
cacheDateList = [];
}
let existkey = false;
cacheDateList.forEach(a => {
//如果存在则重新更新过期时间
if (a.key == key) {
a.invalidtime = curTime.getTime() + milliseconds;
existkey = true;
}
})
//如果不存在, 则新添加
if (!existkey) {
cacheDateList.push({
key: key, invalidtime: curTime.getTime() + milliseconds, interval: milliseconds })
}
//设置缓存对象数组
wx.setStorageSync('cacheDataList', cacheDateList);
}
wx.setStorageSync(key, data);
};
二、得到缓存
//获取缓存数据 isSliding 是否滑动缓存请求
this.GetCache = function (key, isSliding) {
let cacheDateList = [];
let curTime = new Date();
let clist = [];
cacheDateList = wx.getStorageSync('cacheDataList');
if (cacheDateList && cacheDateList.length > 0) {
cacheDateList.forEach(a => {
//剔除已过期的缓存
if (a.invalidtime < curTime.getTime()) {
wx.removeStorageSync(a.key);
}
else {
if (a.key == key) {
if (isSliding) {
a.invalidtime = curTime.getTime() + a.interval;
}
}
clist.push(a);
}
});
wx.setStorageSync('cacheDataList', clist);
}
return wx.getStorageSync(key);
}
总结
通过自定义一个缓存对象,来达到过期时间的设置, 如何清除 wx.setStorageSync(‘cacheDataList’, clist); 对象,或则服务器更新新重置, 可以再从服务器取一个系统版本号写入本地, 当版本号与本地对比不一致时,则直接可清除所有缓存。