uniapp封装缓存方法,支持类似cookie具有过期时间

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()

如果觉得有用随手点个赞吧,谢谢
关注我,不定时分享技术干货~

猜你喜欢

转载自blog.csdn.net/weixin_45295253/article/details/129382372
今日推荐