開發(fā)客戶端時常會用到一些非永久緩存的需求,而微信緩存只能按key永久緩存;其次,當讀取緩存失敗時,有時需要給個默認值,所以得二次判斷下,今天想了一下何不封裝一個緩存框架。 ...
開發(fā)客戶端時常會用到一些非永久緩存的需求,而微信緩存只能按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(new Date());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)
function get(k, def) {var deadtime = parseInt(wx.getStorageSync(k + postfix))if (deadtime) {if (parseInt(deadtime) < Date.parse(new Date()) / 1000) {if (def) { return def; } else { return; }}}var res = wx.getStorageSync(k);if (res) {return res;} else {return def;}}get方法,先通過key+一個后綴得到時間戳,如果時間戳存在,切小于當前時間,說明過期;【那么,當有默認值時返回默認值(包含字符串、數組、json),否則返回空?!慨敍]過期時,正常讀取key的內容,key存在時正常返回;否則返回默認值,當不存在默認值時返回空。
其他方法
function remove(k) {wx.removeStorageSync(k);wx.removeStorageSync(k + postfix);}function clear() {wx.clearStorageSync();}remove(k)需要移除2個key,因為存儲的時候,可能存了時間戳,當然即使不存在key,移除也是不會報錯的。
下載src文件夾內wCache.js文件 需要使用的js文件頭加入var wc = require('../../src/wcache.js')。 var s=wc.get('k', '你好')、wc.put('k', 'string你好啊')等; 使用例子
get(e) {this.setData({text: null});switch (e.currentTarget.dataset.type) {case "def":this.setData({text: wc.get('k')});break;case "string":this.setData({text: wc.get('k', '你好')});break;case "json":this.setData({text: wc.get('k', { "a": "1" })});break;}}put(e) {console.log(e);switch (e.currentTarget.dataset.type) {case "string":wc.put('k', 'string你好啊');break;case "json":wc.put('k', { "b": "3" }, 2);break;case "list":wc.put('k', [1, 2, 3]);break;case "boolean":wc.put('k', true);break;}wx.showToast({title: '存儲成功',duration: 500,})}