后台用redis缓存一些数据,有些数据需要给它一个时效性,比如token,用着挺方便的,写小程序的时候也想有个这种能设置过期时间的东西,可是官方没有直接提供这方面的接口,于是就总(抄)结(袭)其他大牛的一些技巧,简单的封装了一个工具类
好了,废话不多说了,先普及一下小程序的缓存基础知识吧
将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。数据存储生命周期跟小程序本身一致,即除用户主动删除或超过一定时间被自动清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 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
}
这样一个简单的小程序设置缓存过期时间就完成了,不足之处还请多谢指正
本文转自 https://blog.csdn.net/qq_36466653/article/details/86034062,如有侵权,请联系删除。