详细分析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中可以这么调用:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和工作学习方法 AJ-Report是一个基于Java的开源报表工具&#xff0c;它集成了ECharts、Ant Design Vue等前端技术&#xff0c;致力于为企业提供一站式的数据可视化解决方案…

K3梅林系统 强制刷机方法

对于梅林系统升级过过程中出现的无限重启卡屏的解决方案 黄色字体对应于K3 目前机器 主要分成两个关键步骤&#xff1a;第一、进CFE&#xff1b;第二、用TFTP传入文件进行刷机。 第一&#xff1a; 1硬件网线直接连接K3路由LAN口。 2带有无线网卡的电脑需要屏蔽掉无线网卡&…

数据结构 ——— 链式二叉树oj题:相同的树

目录 题目要求 手搓两个链式二叉树 代码实现 题目要求 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 手搓两个链式二叉树 代码演示&…

对标 Windows Copilot 的 UOS AI,升级后更能打了

进入 2024 年&#xff0c;AI 应用迎来大爆发&#xff0c;不仅各类应用纷纷宣称“AI 赋能”&#xff0c;操作系统也不例外。前有 Windows Copilot&#xff0c;后有 Apple Intelligent&#xff0c;手机行业更是积极&#xff0c;各种 AI 手机纷纷发布。国产信创系统自然也不甘落后…

leetcode912.排序数组的题解

题目描述&#xff1a; 题目要求在不使用任何内置函数的情况下解决问题&#xff0c;时间复杂度为 O(nlog(n))。 笔者使用了快速排序&#xff0c;但是直接使用最原始的快速排序&#xff0c;有些特殊的测试用例会超时。 1&#xff09;如果数组本身基本有序&#xff0c;则使用原始…

迷你版VFB,极简的Freebasic开发IDE-VB7-vb6编程开发

支持Freebasic, Js, vbs, Html5开发&#xff0c;可以发布成控制台程序&#xff0c;EXE&#xff0c;标准DLL&#xff0c;OCX控件&#xff0c;网站 类似Vscode, Aardio&#xff0c;按键精灵一样的开发工具。 本来芳芳只是想做个按键精灵办公小工具&#xff0c;结果一下小心搞了一…

【综合案例】使用React编写B站评论案例

一、效果展示 默认效果&#xff0c;一开始默认按照最热进行排序 发布了一条评论 按照最新进行排序 按照最新进行排序 二、效果说明 页面上默认有3条评论&#xff0c;且一开始进入页面的时候是按照点赞数量进行倒序排列展示&#xff0c;可以点击【最热 、最新】进行排序的切换。…

SSL证书申请终极指南

SSL验证是确认网站或服务器提供的SSL 证书的真实性和有效性的过程。 SSL证书验证是确认网站或服务器提供的SSL证书的真实性和有效性的过程。SSL证书是用于在客户端&#xff08;例如Web浏览器&#xff09;和服务器之间建立安全连接的数字证书。它们对于确保通过互联网传输的数据…

处理PhotoShopCS5和CS6界面字体太小

处理PhotoShop CS6界面字体太小 背景&#xff1a;安装PhotoShop CS6后发现无法调大字体大小&#xff0c;特别是我的笔记本14寸的&#xff0c;显示的字体小到离谱。 百度好多什么降低该电脑分辨率&#xff0c;更改电脑的显示图标大小&#xff0c;或者PS里的首选项中的界面设置。…

python中t是什么意思

python中t是什么意思&#xff1f; python中t指的是“\r”&#xff1a;回车符&#xff0c;返回到这一行的开头&#xff0c;return的意思。 其他相关&#xff1a; \n&#xff1a;换行符&#xff0c;到下一行的同一位置&#xff0c;纵坐标相同&#xff0c;new line的意思。 \t…

python项目实战---使用图形化界面下载音乐

音乐下载 设计思路&#xff1a; 设计界面编写爬虫代码绑定爬虫打包exe文件 这个是最终的设计成果&#xff0c;所有的下载歌曲都在“下载mp3”文件夹里面 完整代码 逻辑代码 import os.path import reimport requests from PyQt5.QtWidgets import QApplication,QWidget,QM…

Linux(inode + 软硬链接 图片+大白话)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

从0开始深度学习(24)——填充和步幅

1 填充 在上一节中&#xff0c;我们的卷积步骤如下&#xff1a; 可以发现输入是 3 3 3\times3 33&#xff0c;输出是 2 2 2\times2 22&#xff0c;这样可能会导致原始图像的边界丢失了许多有用信息&#xff0c;如果应用多层卷积核&#xff0c;累积丢失的像素就更多了&#…

C++:模拟实现STL的vector

目录 一.vector类 1.vector类的构造及析构 2.定义迭代器 3.size()和capacity() 4.operator [ ] 5.resize()和reserve() 6.插入和删除 二.整体代码 1.vector.h 2.vector.cpp 上一节中了解了vector中部分接口的使用,在这里我们模拟实现vector,为了避免与库中的起冲突,…

砥砺十年风雨路,向新而行创新程丨怿星科技十周年庆典回顾

10月24日&#xff0c;是一年中的第256天&#xff0c;也是程序员节&#xff0c;同时也是怿星的生日。2014年到2024年&#xff0c;年华似水匆匆一瞥&#xff0c;多少岁月轻描淡写&#xff0c;怿星人欢聚一堂&#xff0c;共同为怿星科技的十周年庆生&#xff01; 01.回忆往昔&…

Chrome与火狐哪个浏览器的移动版本更流畅

在当今的数字化时代&#xff0c;移动设备已经成为我们生活中不可或缺的一部分。而浏览器作为我们访问互联网的重要工具&#xff0c;其性能和用户体验直接影响到我们的使用感受。本文将对比Chrome和火狐&#xff08;Firefox&#xff09;两款主流浏览器的移动版本&#xff0c;探讨…

算法练习:1004. 最大连续1的个数 III

题目链接&#xff1a;1004. 最大连续1的个数 III。 题目要求&#xff0c;给定一个数组&#xff0c;这个数组里面只有0或1&#xff0c;然后计算有多少个连续的1的最大长度&#xff0c;同时给了一个条件就是&#xff0c;可以把k个0变成1&#xff0c;然后来计算长度。 暴力解法&a…

【大数据技术基础 | 实验七】HBase实验:部署HBase

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤&#xff08;一&#xff09;验证Hadoop和ZooKeeper已启动&#xff08;二&#xff09;修改HBase配置文件&#xff08;三&#xff09;启动并验证HBase 六、实验结果七、实验心得 一、实验目的 掌握…

LLMs之LoLCATs:《LoLCATs: On Low-Rank Linearizing of Large Language Models》翻译与解读

LLMs之LoLCATs&#xff1a;《LoLCATs: On Low-Rank Linearizing of Large Language Models》翻译与解读 导读&#xff1a;这篇论文的核心是提出了一种名为 LoLCATs (Low-rank Linear Conversion via Attention Transfer) 的方法&#xff0c;用于高效地将大型语言模型 (LLM) 线性…

linux命令详解,文件管理类

文件管理 stat 显示文件的详细信息&#xff0c;包括时间戳 stat filenametouch 主要用于更新文件的访问时间和修改时间&#xff08;时间戳&#xff09;。如果指定的文件不存在&#xff0c;touch 命令会创建一个新的空文件。 touch newfile参数 -t 更新文件的修改时间为特…