app.js代码
// 缓存有效时间 1小时
cacheTime:60*60,
// 缓存标识
dtime: '_deadtime',
/**
* 设置缓存
* @param k string 键值
* @param v string 值
* @praam t int 过期时间
*/
put:function(k,v,t){
my.setStorageSync({
key:k,
data:v
})
var s = t?parseInt(t):cacheTime; // 如果t为空,则选区默认缓存时间
var timestamp = Date.parse(new Date());
timestamp = timestamp / 1000 + s;
var time = s>0?timestamp:'';
my.setStorageSync({
key:k + this.dtime,
data:time
})
},
// 获取缓存
get:function(k){
var t = my.getStorageSync({
key:k+this.dtime
});
var deadtime = t.data; // 缓存失效时间
var nowTime = Date.parse(new Date()) / 1000; // 小程序服务当前时间
if(deadtime>nowTime){
// a.1 未过期
var res = my.getStorageSync({
key: k,
});
var result = res.success==true?res.data:'';
return result;
}else{
// a.2 时间过期
this.remove(k);
return false;
}
},
// 移除缓存
remove: function (k) {
my.removeStorageSync({
key:k
});
my.removeStorageSync({
key:k + this.dtime
});
},
// 清理缓存
clear: function () {
my.clearStorageSync()
},
index.js代码。最佳效果是把app.put('a',10,10); 放入一个点击事件里面
//获取应用实例
var app = getApp();
Page({
onLoad(query) {
// 页面加载
var t = my.getStorageSync({
key: 'a', // 缓存数据的key
});
console.log(t);
var tt = app.get('a'); // 获取缓存
console.log(tt);
},
click:function(){
app.put('a',10,10); // 10s后过期
}
})
总结:
其实原理很简单,就是一对数组。数组A,是真实有效的数组;数组B,是存储数组A的过期时间。然后数组B的过期时间与支付宝服务器对比,时间>服务器时间,则返回数组A。否者则返回false,并且销毁数组A、B的值
//数组A格式:
{success: true, key: "a", data: 8}
//数组B格式:
{success: true, key: "a_deadtime", data: 1535453436}
扩展
以上面的方法推算出另一种方法(未测试)
{success: true, key: "a", data: 8;}
// 把过期时间直接放这里面
{success: true, key: "a", data: 需要缓存的值+deadtime;}
get:function(k){
var t = my.setStorageSync({
key:k,
data:v
})
if(deatime>服务器时间){
return 缓存值
}else{
删除缓存数据
return false;
}
}
支付宝小程序高级交流群:336925436