javascript本地缓存方案-- 存储对象和设置过期时间
cz-storage 解决问题
1. 前端js使用localStorage的时候只能存字符串,不能存储对象
cz-storage 可以存储 object undefined number string
2. localStorage没有过期时间
cz-storage 可以设置以天为单位的过期时间
3. github地址
安装
yarn add cz-storage || npm i cz-storage
使用
import LS from 'cz-storage'
let value = {name: 'xiejun'}
// 设值
// put (<key>, value, expiredTime)
// expiredTime 过期时间单位是天 1/8 === 3小时
LS.put('key', value, 1)
// 获取值
LS.get('key')
// 清楚所有缓存
LS.clear()
// 删除某个key
LS.remove('key')
源码
/**
* 使用 html5 提供的 localStorage来缓存数据
**/
const SPLIT_STR = '@'
const localStorage = window.localStorage
const DATA_PROCESS_MAPPING = {
'number': {
save : data => data,
parse: data => Number.parseFloat(data)
},
'object': {
save : data => JSON.stringify(data),
parse: data => JSON.parse(data)
},
'undefined': {
save: data => data,
parse: () => undefined
},
'default': {
save : data => data,
parse: data => data
}
}
function getProcess(type) {
return DATA_PROCESS_MAPPING[type] || DATA_PROCESS_MAPPING['default']
}
export default {
get(key) {
let stringData = localStorage.getItem(key)
if (stringData) {
let dataArray = stringData.split('@')
let data
let now = Date.now()
if (dataArray.length > 2 && dataArray[2] < now) { // 缓存过期
localStorage.removeItem(key)
return null
} else {
let value = decodeURIComponent(dataArray[1])
data = getProcess(dataArray[0]).parse(value)
return data
}
}
return null
},
put(key, value, expired) { // expired 过期时间 单位天 默认是100 上线测试没问题替换旧的设值
const type = typeof value
const process = getProcess(type)
if (!expired) { // 默认不传 不过期
value = type + SPLIT_STR + encodeURIComponent(process.save(value))
} else {
let time = expired * 24 * 60 * 60 * 1000 + new Date().getTime()
value = type + SPLIT_STR + process.save(value) + SPLIT_STR + time
}
localStorage.setItem(key, value)
},
clear() {
localStorage.clear()
},
remove(key) {
localStorage.removeItem(key)
}
}
个人公众号

javascript本地缓存方案-- 存储对象和设置过期时间的更多相关文章
- 可以设置过期时间的Java缓存Map
前言 最近项目需求需要一个类似于redis可以设置过期时间的K,V存储方式.项目前期暂时不引进redis,暂时用java内存代替. 解决方案 1. ExpiringMap 功能简介 : 1.可设置Ma ...
- redis 一二事 - 设置过期时间,以文件夹形式展示key显示缓存数据
在使用redis时,有时回存在大量数据的时候,而且分类相同,ID相同 可以使用hset来设置,这样有一个大类和一个小分类和一个value组成 但是hset不能设置过期时间 过期时间只能在set上设置 ...
- java操作Redis缓存设置过期时间
关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...
- C# 给PDF文档设置过期时间
我们可以给一些重要文档或者临时文件设置过期时间和过期信息提示来提醒读者或管理者文档的时效性,并及时对文档进行调整.更新等.下面,分享通过C#程序代码来给PDF文档设置过期时间的方法. 引入dll程序集 ...
- 如何为Redis中list中的项设置过期时间
问题 两种解决方法 有序集合 多个集合以及TTL Redis是一个伟大的工具,用来在内存中存储列表是很合适的. 不过,如果你想要快速搜索列表,同时需要让列表中每项都在一定时间后过期,应该怎么做呢? 首 ...
- redis批量设置过期时间
Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作.代码如下: redis-cli keys &qu ...
- redis文档翻译_key设置过期时间
Available since 1.0.0. 使用開始版本号1.01 Time complexity: O(1) 时间复杂度O(1) 出处:http://blog.csdn.net/colum ...
- Redis原子性写入HASH结构数据并设置过期时间
Redis中提供了原子性命令SETEX或SET来写入STRING类型数据并设置Key的过期时间: > SET key value EX NX ok > SETEX key value ok ...
- redis能否对set数据的每个member设置过期时间
第一种方法,拆分成多个key,每个key设置过期时间.第二种方法改为hashMap存储,加一个过期时间的字段.可以用sorted set,把要过期的member和key的信息放在sorted set的 ...
随机推荐
- 【codeforces 778C】 Peterson Polyglot
http://codeforces.com/problemset/problem/778/C (题目链接) 题意 给出一个字典树,问删掉哪一层以后,得到的字典树最小. Solution 直接对于每一层 ...
- Web Service(下)
4.WSDL文档 <?xml version='1.0' encoding='UTF-8'?> <wsdl:definitions xmlns:xsd="http://ww ...
- JS的关键字this
1.关于this this关键字是JavaScript中最复杂的机制之一.它是一个很特别的关键字,被自动定义在所有函数的作用域中. 1.1 为什么要用this? this提供了一种更优雅的方式来隐式地 ...
- 特征降维之PCA
目录 PCA思想 问题形式化表述 PCA之协方差矩阵 协方差定义 矩阵-特征值 PCA运算步骤 PCA理论解释 最大方差理论 性质 参数k的选取 数据重建 主观理解 应用 代码示例 PCA思想 PCA ...
- Activity工作流(2)-入门安装运行第一个例子
转: Activity工作流(2)-入门安装运行第一个例子 置顶 2017年05月24日 15:58:50 li_ch_ch 阅读数:24432 版权声明:本文为博主原创文章,未经博主允许不得转载 ...
- CH3101 阶乘分解
题目链接 分解\(n!\)的质因数,输出相应的\(p_i\)和\(c_i\). 其中\(1\leq n\leq 10^6\). 考虑每一个质因子 \(p\) 在 \(n!\) 中出现的次数.显然, ...
- Kubernetes--kubectl
一.Kubectl命令行说明 类型 命令 描述 基础命令 create 通过文件名或标准输入创建资源 expose 将一个资源公开为一个新的kubernetes服务 run 创建并运行一个特定的镜 ...
- CSS边框及常用样式
一.CSS设置样式 1.1 边框border 作用:设置标签周围的边框,方法 board:宽度 样式 颜色,一般情况下样式使用 solid实体的,和dotted虚线的 <head> &l ...
- Javascript 浮点计算问题分析与解决
分析 JavaScript 只有一种数字类型 Number ,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的. 浮点数的精度问题不是JavaScript特有的,因为有些小数 ...
- Linux设备驱动之Ioctl控制
大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力. 一.在用户空间,使用ioctl系统调用来控制设备,原型如下: int ioctl(int fd,unsigned long cm ...