开发客户端时常会用到一些非永久缓存的需求,而微信缓存只能按key永久缓存;其次,当读取缓存失败时,有时需要给个默认值,所以得二次判断下,今天想了一下何不封装一个缓存框架。 ...
一、前言
开发客户端时常会用到一些非永久缓存的需求,而微信缓存只能按key永久缓存;其次,当读取缓存失败时,有时需要给个默认值,所以得二次判断下,今天想了一下何不封装一个缓存框架。
二、支持方法
put(k, v, t)
k为key,v为具体内容(支持字符串、json、数组、boolean等等),t为可选参数表示有效时间(单位:秒)
如存储k为123过期时间1秒,则调用put('k', '123', 1)方法;若永久存储调用put('k', '123')
永久保存json:put('k', {"a":"1"}),数组、boolean等同理。
get(k, def)
k为key,def为可选参数,表示无缓存数据时返回值(支持字符串、json、数组、boolean等等)
如读取k缓存,则调用get('k');若想要无缓存时,返回默认值则get('k','默认值'),支持各个数据类型。
remove(k)
移除某个key
clear()
清空所有key
其他方法
使用wx原生的即可。
三、框架讲解
put(k, v, t)
function put(k, v, t){
// console.log(k);
wx.setStorageSync(k, v)
var seconds = parseInt(t);
if(seconds >0){
var timestamp =Date.parse(newDate());
timestamp = timestamp /1000+ seconds;
// console.log(timestamp);
wx.setStorageSync(k + postfix, timestamp +"")
}else{
wx.removeStorageSync(k + postfix)
}
}
先存储key的数据(字符串、数组、json),再判断过期时间是否大于0,当大于0时,存储key+一个后缀,内容为当前时间戳(单位秒)+有效时间t。
get(k, def)
functionget(k,def){
var deadtime = parseInt(wx.getStorageSync(k + postfix))
if(deadtime){
if(parseInt(deadtime)<Date.parse(newDate())/1000){
if(def){returndef;}else{return;}
}
}
var res = wx.getStorageSync(k);
if(res){
return res;
}else{
returndef;
}