后台用redis缓存一些数据,有些数据需要给它一个时效性,比如token,用着挺方便的,写小程序的时候也想有个这种能设置过期时间的东西,可是官方没有直接提供这方面的接口,于是就总(抄)结(袭)其他大牛的一些技巧,简单的封装了一个工具类
好了,废话不多说了,先普及一下小程序的缓存基础知识吧
将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。数据存储生命周期跟小程序本身一致,即除用户主动删除或超过一定时间被自动清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。
划重点呀
相同的key会覆盖;
用户可以主动删除缓存;
缓存数据有10MB!
localStorage 以用户维度隔离,说到隔离,我就想起之前有几个同学说A用户的数据被B用户拿到了,当时我有点惊讶,小程序的数据缓存是不会窜用户的吧,后来大半夜的帮那位同学找bug,原来是后台的一个判断错了,还有一个是在真机调试的时候发生,最后原因是因为这里,勾选了使用工具端的Storage,勾了这个选项,缓存就共享了
又说了一些题外话,咳咳,继续继续
localStorage 以用户维度隔离
同一台设备上,同一个小程序,A 用户无法读取到 B 用户的数据。
其实这点我刚开始接触小程序缓存的时候也分不清,因为怕数据混乱,然后每次进小程序的时候都先清除全部缓存,现在感觉当时好2啊
缓存的一些详细的用法我这里就不讲了哈,我主要还是讲讲设置缓存的有效期,详细还请各位同学去小程序官网翻API
https://developers.weixin.qq.com/miniprogram/dev/api/wx.setStorage.html
思路其实就是,封装一个方法,方法的参数就是 键key,值value,时间time,里面存两个缓存,一个存你要存的数据,一个用来存时间,这个时间怎么存呢,自定义一个标识(我用的是“redis”)+key值
取值的也是一样的,封装一个方法,参数只需要key就行了,先用自定义的标识+key取出时间,然后比较现在的时间,如果大于现在的时间,说明还没过期,然后返回key对应的value,如果小于现在的时间,说明过期了,删除key对应的数据,返回null
下面贴个代码,同学们即可C+V使用
redis.js
var redis= "redis"/** * 设置 * k 键key * v 值value * t 秒 */function put(k, v, t) { wx.setStorageSync(k, v) var seconds = parseInt(t) if (seconds > 0) { var newtime = Date.parse(new Date()) newtime = newtime / 1000 + seconds; wx.setStorageSync(k + redis, newtime + "") } else { wx.removeStorageSync(k + redis) }}/** * 获取 * k 键key */function get(k) { var deadtime = parseInt(wx.getStorageSync(k + redis)) if (deadtime) { if (parseInt(deadtime) < Date.parse(new Date()) / 1000) { wx.removeStorageSync(k); console.log("过期了") return null } } var res=wx.getStorageSync(k) if(res){ return res }else{ return null }}/** * 删除 */function remove(k) { wx.removeStorageSync(k); wx.removeStorageSync(k + redis);}/** * 清除所有key */function clear() { wx.clearStorageSync();}module.exports={ put, get, remove, clear}这样一个简单的小程序设置缓存过期时间就完成了,不足之处还请多谢指正














