详细分析WebStorageCache 基本知识

目录

  • 1. 基本知识
  • 2. Demo

1. 基本知识

相关的源码如下:web-storage-cache

WebStorageCache 是一个用于扩展 HTML5 的 localStorage 和 sessionStorage 的库,增加了超时时间管理和序列化功能。它可以存储 JSON 对象,并且在存储数据时可以方便地设置超时时间。这个库还能够自动清除过期数据,避免了数据的累积

相关的源码如下:

declare module 'web-storage-cache' {class WebStorageCache {/*** WebStorageCache 对 HTML5 `localStorage` 和 `sessionStorage` 进行了扩展,添加了超时时间,序列化方法。可以直接存储 json 对象,同时可以非常简单的进行超时时间的设置。* **优化**:WebStorageCache 自动清除访问的过期数据,避免了过期数据的累积。另外也提供了清除全部过期数据的方法:`wsCache.deleteAllExpires()`*/constructor(options?: Partial<WebStorageCacheConstructorOptions>)/*** 检查当前选择作为缓存的storage是否被用户浏览器支持。 如果不支持调用WebStorageCache API提供的方法将什么都不做。*/static isSupported(): boolean/*** 往缓存中插入数据。* @param key* @param value 支持所以可以JSON.parse 的类型。注:当为undefined的时候会执行 delete(key)操作。* @param options*/set(key: string, value: any, options?: Partial<WebStorageCacheOptions>): void/*** 根据key获取缓存中未超时数据。返回相应类型String、Boolean、PlainObject、Array的值。*/get(key: string): any/*** 根据key删除缓存中的值*/delete(key: string): void/*** 删除缓存中所有通过WebStorageCache存储的超时值*/deleteAllExpires(): void/*** 清空缓存中全部的值* 注意:这个方法会清除不是使用WebStorageCache插入的值。推荐使用:deleteAllExpires*/clear(): void/*** 根据key为已存在的(未超时的)缓存值以当前时间为基准设置新的超时时间。* @param key* @param exp 单位:秒 js对象包含exp属性(以当前时间为起点的新的超时时间)*/touch(key: string, exp: number): void/*** 根据key做插入操作,如果key对应的值不存在或者已超时则插入该值,反之什么都不做。* 注:不是通过WebStorageCache插入的值也会当作失效的值,依然执行add操作** @param key* @param value* @param options*/add(key: string, value: any, options?: Partial<WebStorageCacheOptions>): void/*** 根据key做插入操作,如果key对应的值存在并且未超时则插入该值,反之什么都不做* 注:超时时间以当前时间为基准重新设置** @param key* @param value* @param options*/replace(key: string, value: any, options?: Partial<WebStorageCacheOptions>): void}interface WebStorageCacheOptions {/*** 超时时间,秒。* 默认无限大。*/exp: number/*** 为true时:当超过最大容量导致无法继续插入数据操作时,先清空缓存中已超时的内容后再尝试插入数据操作。* 默认为true。*/force: boolean}interface WebStorageCacheConstructorOptions {/*** 'localStorage', 'sessionStorage', window.localStorage, window.sessionStorage 或者其他实现了 [Storage API] 的storage实例* 默认 'localStorage'*/storage: 'localStorage' | 'sessionStorage' | Storage/*** 公共超时事件设置 默认无限大*/exp: number}export = WebStorageCache
}

对应的各个API接口使用如下:

方法/属性描述
constructor(options)创建 WebStorageCache 实例,可选配置
static isSupported()检查浏览器是否支持当前选择的存储类型(localStorage 或 sessionStorage)
set(key, value, options)向缓存中插入数据。若 value 为 undefined,则执行删除操作
get(key)根据 key 获取未超时的缓存数据,返回相应的值(可以是 String、Boolean、PlainObject 或 Array)
delete(key)根据 key 删除缓存中的值
deleteAllExpires()删除缓存中所有过期的值
clear()清空缓存中所有值,包括非通过 WebStorageCache 插入的值
touch(key, exp)为已存在的缓存值设置新的超时时间(以当前时间为基准)
add(key, value, options)如果 key 对应的值不存在或已超时,则插入该值
replace(key, value, options)如果 key 对应的值存在且未超时,则更新该值的超时时间并重新插入

相关的配置选项:

选项描述
storage指定使用的存储类型,默认为 ‘localStorage’。可选值为 ‘localStorage’、‘sessionStorage’ 或任何实现了 [Storage API] 的实例
exp公共超时时间设置,默认为无限大

2. Demo

基本的Demo使用如下:

// 引入 WebStorageCache
const WebStorageCache = require('web-storage-cache');// 创建 WebStorageCache 实例,使用 localStorage
const wsCache = new WebStorageCache({storage: 'localStorage',exp: 3600 // 设置默认超时时间为1小时
});// 设置缓存
wsCache.set('user', { name: '张三', age: 25 }, { exp: 600 }); // 设置超时时间为10分钟// 获取缓存
const user = wsCache.get('user');
console.log(user); // 输出: { name: '张三', age: 25 }// 更新缓存的超时时间
wsCache.touch('user', 1200); // 将超时时间更新为20分钟// 添加缓存,仅在键不存在或超时时插入
wsCache.add('settings', { theme: 'dark' });// 替换缓存,仅在键存在且未超时时更新值
wsCache.replace('settings', { theme: 'light' });// 删除缓存
wsCache.delete('user');// 删除所有过期数据
wsCache.deleteAllExpires();// 清空所有缓存
wsCache.clear();

实战中的配置可以如下:

/*** 配置浏览器本地存储的方式,可直接存储对象数组。*/import WebStorageCache from 'web-storage-cache'type CacheType = 'localStorage' | 'sessionStorage'export const CACHE_KEY = {// 用户相关ROLE_ROUTERS: 'roleRouters',USER: 'user',// 系统设置IS_DARK: 'isDark',LANG: 'lang',THEME: 'theme',LAYOUT: 'layout',DICT_CACHE: 'dictCache',// 登录表单LoginForm: 'loginForm',TenantId: 'tenantId'
}export const useCache = (type: CacheType = 'localStorage') => {const wsCache: WebStorageCache = new WebStorageCache({storage: type})return {wsCache}
}export const deleteUserCache = () => {const { wsCache } = useCache()wsCache.delete(CACHE_KEY.USER)wsCache.delete(CACHE_KEY.ROLE_ROUTERS)// 注意,不要清理 LoginForm 登录表单
}

后续在ts中可以这么调用:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5806.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何用手机将驾驶证信息转为结构化Excel表格

在日常生活和工作中&#xff0c;我们经常需要将纸质文档或图片中的信息转化为结构化的电子数据&#xff0c;以便更好地进行管理和分析。驾驶证作为重要的个人证件&#xff0c;其信息的电子化也显得尤为重要。本文将详细介绍如何使用手机将驾驶证信息转化为结构化的Excel表格。 …

Idea自动生成mysql表DML语句

背景 在开发上线的时候&#xff0c;某个表会被多次修改&#xff0c;更改了多个字段。上线的时候需要变更线上数据表&#xff0c;会很麻烦。需要自己写很多个DML语句。 IDEA解决方案 使用IDEA的数据库插件可以很快的得到变更表的DML语句。 步骤&#xff1a; 勾选不同环境的两…

自动化细胞核分割与特征分析

自动化细胞核分割与特征分析 引言效果展示HoverNet概述HoverNet原理分析整体网络框架实例分割原理 HoverNet评估结果复现过程细胞核特征应用说明参考文献总结备注资源获取 本文所涉及所有资源均在传知代码平台可获取 引言 细胞核分割和分类在医学研究和临床诊断中具有重要意义…

[ZJCTF 2019]NiZhuanSiWei

[ZJCTF 2019]NiZhuanSiWei 审题 看到可以传入file&#xff0c;text&#xff0c;和password三个参数。 知识点 php伪协议&#xff0c;反序列化 解题 传入text&#xff0c;看到有file_get_content函数&#xff0c;这个函数表示读取$text文件里的值&#xff0c;返回字符串。 所…

Transformer究竟是什么?预训练又指什么?BERT

目录 Transformer究竟是什么? 预训练又指什么? BERT的影响力 Transformer究竟是什么? Transformer是一种基于自注意力机制(Self-Attention Mechanism)的神经网络架构,它最初是为解决机器翻译等序列到序列(Seq2Seq)任务而设计的。与传统的循环神经网络(RNN)或卷…

阿里云对象存储OSS

Alibaba Cloud OSS Alibaba Cloud OSS: 阿里云对象存储服务&#xff08;Object Storage Service&#xff0c;简称 OSS&#xff09;&#xff0c;是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 1.引…

element plus中修改el-table的样式

文章目录 前情提要相关环境package.jsonvue代码结果 方式一直接看代码 方式二直接看代码 前情提要 因为项目中用到el-table的时候&#xff0c;需要将el-table表格的样式进行修改&#xff0c;将整个表格的背景颜色从白色变成透明&#xff0c;使得表格变得透明之后&#xff0c;展…

HTML前端页面设计静态网站

浅浅分享一下前端作业&#xff0c;大佬轻喷~ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>一个网…

tauri开发中如果取消了默认的菜单项,复制黏贴撤销等功能也就没有了,解决办法

取消默认的菜单项&#xff1a;清除tauri默认的菜单项&#xff0c;让顶部的菜单menu不显示-CSDN博客 就是通过配置空菜单&#xff0c;让菜单不显示&#xff0c;但是这个引发的问题就是复制黏贴撤销等功能也就没有了&#xff0c;解决办法&#xff1a; 新增加编辑下的子菜单&…

02 高效调优:Oracle内存体系的精细化管理实践

文章目录 高效调优&#xff1a;Oracle内存体系的精细化管理实践一、Oracle内存体系的核心组件1.1 系统全局区&#xff08;SGA&#xff09;1.2 程序全局区&#xff08;PGA&#xff09; 二、各组件的交互关系2.1 Buffer Cache与磁盘I/O2.2 Shared Pool与SQL执行2.3 PGA与会话管理…

Qt中的Model与View 3:从样例出发理解QStringListModel和QListView

目录 Ui文件设计如下&#xff1a; 初始化窗口 这里&#xff0c;就是一经典的例子 你可以看到&#xff0c;我们的环境变量是一个经典的List列表&#xff0c;其中承载的就是我们的字符串。我们现在来仿照着搞一个&#xff1a; Ui文件设计如下&#xff1a; 我们下面来逐一演示用…

【简信CRM-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Python 三维图表绘制指南

Python 三维图表绘制指南 在数据可视化中&#xff0c;三维图表可以更直观地展示数据之间的关系&#xff0c;尤其是当数据具有多个维度时。Python 提供了多个库来绘制三维图表&#xff0c;其中最常用的就是 Matplotlib。本文将介绍如何使用 Matplotlib 绘制三维图表&#xff0c…

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测

粒子群优化双向深度学习&#xff01;PSO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 粒子群优化双向深度学习&#xff01;PSO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BiTCN-BiGRU-Attention粒子…

智能离线语音识别不灵敏?如何改善和提升识别率?

前言 有用户反馈离线语音识别不灵敏&#xff0c;跟着笔者一起分析原因吧。笔者知识能力有限&#xff0c;难免会误&#xff0c;还请大家批评指正。 1 影响离线语音识别的因素 笔者分析离线语音识别不灵敏的原因有以下几点 1.1 运行硬件的算力限制 由于离线语音识别在本地MCU…

7.qsqlquerymodel 与 qtableview使用

目录 qtableview 委托QStyledItemDelegateQAbstractItemDelegateCheckBoxItemDelegate使用qtableview控制列宽&#xff0c;行高&#xff0c;隐藏拖拽行列 qtableview 委托 //设置单元格委托 void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *it…

加入广告联盟有什么条件吗?

加入广告联盟往往并非是一件轻而易举的事情&#xff0c;而是需要满足一系列特定的条件。这些条件的确会因不同的广告联盟而存在显著的差异&#xff0c;然而&#xff0c;以下所列举的是一些在众多广告联盟中较为常见的加入条件。 首先&#xff0c;内容合规是至关重要的一点。发…

实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎

摘要&#xff1a;本文整理自阿里云智能集团研究员、开源大数据平台负责人王峰&#xff08;莫问&#xff09;老师在云栖大会的开源大数据专场上的分享。主要有以下几个内容&#xff1a; 1. Apache Flink 已经成为业界流计算事实标准 2. Flash 向量化流计算引擎核心技术解读 3. F…

springboot《计算机网络》在线考试系统-计算机设计毕业源码22248

摘要 计算机网络课程是计算机科学与技术、信息技术及相关专业的一门重要课程。然而&#xff0c;在传统的教育模式下&#xff0c;计算机网络课程的考核方式多以纸质试卷为主&#xff0c;这种方式存在诸多弊端。一方面&#xff0c;试卷的编制、印刷、分发、收缴等环节耗时耗力&am…

【K8S系列】Kubernetes 中 Service 更改未生效的故障排查与解决方案【已解决】

在 Kubernetes 中&#xff0c;Service 是实现 Pod 之间通信的核心组件。当您对 Service 进行更改&#xff08;如修改端口或选择器&#xff09;时&#xff0c;有时可能会发现这些更改未能生效&#xff0c;导致服务无法正常工作。本文将详细描述这一问题&#xff0c;并提供故障排…