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.localStorageconst 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 datalet 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 valueconst 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)}
}

个人公众号

转载于:https://www.cnblogs.com/net-xiejun/p/9660510.html

javascript本地缓存方案-- 存储对象和设置过期时间相关推荐

  1. redis 存储数据不设置过期时间 会自动过期吗_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  2. iOS本地缓存方案之YYCache源码解析

    iOS持久化方案有哪些? 简单列举一下,iOS的本地缓存方案有挺多,各有各的适用场景: NSUserDefault : 系统提供的最简便的key-value本地存储方案,适合比较轻量的数据存储,比如一 ...

  3. 可以设置过期时间的Java缓存Map

    前言 最近项目需求需要一个类似于redis可以设置过期时间的K,V存储方式.项目前期暂时不引进redis,暂时用java内存代替. 解决方案 1. ExpiringMap 功能简介 : 1.可设置Ma ...

  4. 前端小白闲着没事,封装一个可以设置过期时间的localStorage存储函数,在vue脚手架中使用

    本身localStorage 是没有这个功能的,除非手动删除要不永久保存在本地. seesionStorage 我们就不考虑 他这个只要网页的标签关闭了 在当前标签就自动清除了存储. 在工作中 我们用 ...

  5. @cacheable 设置过期时间_缓存面试三连击——聊聊Redis过期策略?内存淘汰机制?再手写一个LRU 吧!...

    大家好,今天我和大家想聊一聊有关redis的过期策略的话题. 听到这里你也许会觉得:"我去,我只是个日常搬砖的,这种偏底层的知识点,我需要care吗?" 话虽如此·,但是兄die, ...

  6. Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内

    1.基础说明 当redis设置内存使用限制后,当达到内存限制时,Redis将尝试删除key(控制节点的最大使用内存) redis.conf中配置项maxmemory <bytes>或者控制 ...

  7. c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间

    相信大家在很多业务场景都会遇到对数据设置过期时间,如安全认证token.短信验证码等.一般我们的解决有几种:存redis.存数据库.实时计算(如JWT),不管使用哪种方式,需求就是过期了对数据的清理. ...

  8. redis缓存失效时间设为多少_java操作Redis缓存设置过期时间的方法

    关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...

  9. spring缓存注解@Cacheable和@CacheEvict,设置过期时间和批量模糊删除

    spring缓存注解@Cacheable和@CacheEvict,设置过期时间和批量模糊删除 配置 CacheManager 类 key前缀配置 RedisCache配置 RedisCache 模糊匹 ...

最新文章

  1. 怎样用Jenkins触发还有一个Jenkins---Global build solution
  2. vsftpd 虚拟用户的配置
  3. port-forward使用示例:kubectl port-forward deployment/kubernetes-dashboard -n kubernetes-dashboard :9090
  4. Java BigDecimal valueOf()方法与示例
  5. Time除了监控程序运行时间还能干这个?
  6. 跨过山和大海的地铁外放党们有人管了,明年开始!网友:没收手机么?
  7. ICP算法与Kdtree
  8. C++结构体传参问题
  9. Spark 概念学习系列之从spark架构中透视job(十六)
  10. 基于搜狗平台的微信文章爬虫
  11. 15、Java基础---继承和访问属性
  12. 激光清洗铝合金氧化层的优势
  13. oracle 获取日期的毫秒_Oracle date timestamp 毫秒 - 时间函数总结(转)
  14. 实时可调度性分析算法— 利用率上界 和 加速因子的作用
  15. 狗咬吕洞宾,不识好人心的来历
  16. 如何用Jmeter发送消息到Solace JNDI
  17. 安卓开发———打开相机拍照或者打开相册选择照片并显示出来
  18. 【两所985大学】计算机/软件学院被合并到信息学部/院!
  19. 网页标题添加ico图标
  20. js函数内返回一个内部函数详解

热门文章

  1. 盲人也能用,优酷App做了哪些无障碍实践?
  2. 同样是查询语言,它和 SQL 竟然有这么多不同
  3. 04Prism WPF 入门实战 - Module
  4. ATSAMD21-XPRO开发板 评估基于 ATSAM D21 CortexM0+ 的微控制器
  5. 上一局APP玩,你画我猜,作为灵魂画手从没服过谁
  6. 第六届蓝桥杯JavaC组_垒骰子_详解
  7. proxy error: could not proxy request解决方案
  8. ASP.NET MVC项目的创建
  9. VS code 使用 Remote-SSH 进行python远程开发
  10. ASP.NET Core 基础知识(十四)错误处理