1、定义CacheManage类,有set和get方法
class CacheManage {
set() {},
get() {}
}
set用来设置缓存,get用来获取缓存
2、完善set业务逻辑
大概逻辑如下:
1、将接收params参数,包含key、data、unit、time
key 缓存字段,必填
data 缓存数据,必填
unit 缓存时间单位,有效值 day hours minutes; 默认 day
time 缓存有效期,默认 0 (无过期时间)
2、判断key和data不能为空,防止设置缓存时出错
3、判断unit参数,分别处理缓存过期时间
4、判断缓存size是否超上限,并及时清除
5、设置缓存,并以’|’字符分割过期时间戳
6、实现代码如下:
set(params) {
let { key, data, unit='day', time=0 } = params
// 过期时间
let expirationTime = 0
if (key && data) {
let storageInfo = uni.getStorageInfoSync()
if(storageInfo.limitSize - storageInfo.currentSize < 5) {
uni.clearStorageSync()
}
if(time === 0) { // 缓存不会失效
uni.setStorageSync(key, data)
// uni.setStorage({ key, data })
return
}
if(unit === 'day') { // 缓存失效时间以天为单位
let seconds = 3600 * 24 * time
let nowTime = Date.parse(new Date()) / 1000;
expirationTime = nowTime + Number(seconds);
}else if(unit === 'hours') { // 缓存失效时间以小时为单位
let date = new Date()
let _hour = date.getHours()
date.setHours(_hour + time)
expirationTime = Date.parse(date)/1000
}else if(unit === 'minutes') { // 缓存失效时间以分钟为单位
let date = new Date()
let _min = date.getMinutes()
date.setMinutes(_min+time)
expirationTime = Date.parse(date)/1000
}
uni.setStorageSync(key, JSON.stringify(data) + '|' + expirationTime)
}
}
3、完善get逻辑
大概逻辑如下:
1、将接收要获取的缓存key
2、判断key不能为空
3、获取缓存
4、获取当前的时间戳,与缓存时间错比较,以判断缓存是否过期
5、获取指定缓存key,判断数据类型,分别返回
实现代码如下:
get(key) {
if (key) {
let nowTime = Date.parse(new Date()) / 1000;
let data= uni.getStorageSync(key);
if (data) {
if(typeof(data) == 'string') {
let temp = data.split('|')
if (temp[1] && temp[1] <= nowTime) {
// 缓存已过期,删除缓存数据
uni.removeStorageSync(key)
return '';
} else {
// 处理有效缓存数据
if(temp[1]) {
return JSON.parse(temp[0]);
}else {
return temp[0];
}
}
}else {
// 如果不是字符串,直接返回
return data
}
}
return '';
}
}
4、导出类
export default new CacheManage()
如果觉得有用随手点个赞吧,谢谢
关注我,不定时分享技术干货~
版权声明:本文为weixin_45295253原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。