1. 程式人生 > >支付寶小程式快取過期時間二開

支付寶小程式快取過期時間二開

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