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

  • Post author:
  • Post category:uniapp




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 版权协议,转载请附上原文出处链接和本声明。