cache 缓存的处理

/**
* 数据缓存cache文件
*/

/**
* cache策略
*
* 缓存key相关
* 1. 自定义key
* 2. 通过url相关来判断是否相同key (需要和http请求模块放一起写)
* 1)非严格模式,通过对比url来判断
* 2)严格模式,通过对比url、请求方式、参数来判断是否为相同的key
*
* 缓存数据存储方式方式,强cache还是弱cache
* 1)localstorage、indexDB
* 2) sessionstorage、JS对象
*
* 2. 是否需要设置缓存数据过期时间
* 1) 需要设置缓存时间
* 2) 不需要设置缓存时间 默认为-1,不检测
*
* 3. 缓存前缀,通过前缀区别不同key
*
* 缓存数据格式
* {
* expires: 1504003903042 || -1, // 设置过期时间
* data: value // 源数据
* }
*
*/

import { lstorage, sstorage } from '@/utils/storage'
import { getKey } from '@/utils/utils'

/**
* 缓存构造函数
*/
function Cache ( options = {}) {
// 基础配置项
const conf = {
// 可用的缓存过期时间示例
// expires: 60 * 60 * 1000, // 缓存过期时间1小时
// expires: 60 * 1000, // 缓存过期时间1分钟
expires: - 1, // 缓存时间设置为 -1,代表不检测缓存时间
prefix: '', // 缓存key前缀
type: 1 // 1: 强缓存类型, 2: 弱缓存类型
}
// 设置对象属性
this. options = Object. assign( conf, options)
}

/**
* 新创建cache对象
*/
Cache. create = function ( options = {}) {
return new Cache( options)
}

/**
* 缓存数据
* key可以是对象字面量,也可以是字符串
* val 需要缓存的值
* options 配置项
*/
Cache. prototype. set = function ( key, val, options = {}) {
// 更新配置项
options = Object. assign( this. options, options)

// 拼接前缀,获取cache MD5 key
key = getKey( options. prefix + key)

// 判断用户是否需要设置缓存时间
// 设置缓存时间,则将过期时间持久化,否则持久化-1
if ( options. expires !== - 1) {
options. expires = new Date(). getTime() + options. expires
}

// 构造存储数据结构
val = {
expires: options. expires, // 设置过期时间
data: val // 源数据
}

// 判断存储类型,强缓存(localStorage) || 弱缓存(sessionStorage)存储
options. type === 1 ? lstorage. set( key, val) : sstorage. set( key, val)
}

/**
* 获取缓存信息
*/
Cache. prototype. get = function ( key, options = {}) {
// 更新配置项
options = Object. assign( this. options, options)

// 拼接前缀,获取cache MD5 key
key = util. getKey( options. prefix + key)

// 判断数据是否为强缓存类型
let val = options. type === 1 ? lstorage. get( key) : sstorage. get( key)

// 判断存在缓存值,并且未设置缓存时间,(默认缓存值为 -1),返回源数据
if ( val && options. expires === - 1) return val. data

// 判断存在设置缓存值,(缓存值不为 -1),缓存时间过期则返回false,不过期则返回源数据
if ( val && options. expires !== - 1 && val. expires > new Date(). getTime()) return val. data

// 数据源不存在 || 非设置缓存 || 缓存过期,返回 undefined
return undefined
}

/**
* 删除缓存数据
*/
Cache. prototype. remove = function ( key, options = {}) {
// 更新配置项
options = Object. assign( this. options, options)

// 获取cache MD5 key
key = util. getKey( options. prefix + key)

// 判断存储类型,移除强缓存(localStorage) || 弱缓存(sessionStorage)存储
options. type === 1 ? lstorage. remove( key) : sstorage. remove( key)
}

/**
* 更新缓存配置文件
*/
Cache. prototype. config = function ( options = {}) {
// 更新配置项
this. options = Object. assign( this. options, options)
}

// 实例化Cache对象
let cache = new Cache()

export {
cache,
Cache
}

转载于:https://www.cnblogs.com/yayaxuping/p/10099173.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值