支付宝小程序缓存过期时间二开

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

猜你喜欢

转载自blog.csdn.net/zhongjie19/article/details/82153086
今日推荐