支付寶小程式快取過期時間二開
阿新 • • 發佈:2019-02-09
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