首页 > 其他分享 >localStorage如何设置过期时间 (如何封装自定义localStorage)

localStorage如何设置过期时间 (如何封装自定义localStorage)

时间:2023-06-22 17:11:46浏览次数:33  
标签:缓存 封装 name 自定义 过期 expires localStorage storages

1、创建Storage类

  • 定义 对应的get set remove clear api
  • 通过set函数添加过期时间参数来实现过期时间的记录
  • 设置存储时存储当前值和过期时间
  • get取值的时候先验证当前值是否存在 以及时间是否大于过期时间 如果存在且不大于过期时间既可返回对应的值否则返回空
class Storage {
    constructor() {
        this.storageName = 'expiredStorage'
    }
    
    
    /**
     *  设置缓存
     *  @param {string} name 缓存名称
     *  @param {any} value 缓存的值
     *  @param {any} expires 缓存过期时间(秒) 
    **/
    set(name, value, expires) {
        const storages ={}
        storages[name] = {
            value,
            expires: storages[name]
                ? storages[name].expires
                : expires === undefined
                ? +new Date() + 31536000000 //默认365天 这个值可以自己修改
                : expires * 1000 + +new Date(),
        };
        localStorage.setItem(this.storageName, JSON.stringify(storages))
    }
    
    /**
     *  获取缓存
     *  @param {string} name 缓存名称
    **/
    get(name) {
        const storages = JSON.parse(localStorage.getItem(this.storageName))
        try {
            if (!storages[name]) {
                // 不存在
                return null;
            }
            console.log('log=====',  storages[name].expires - new Date());
            if (+new Date() > storages[name].expires) {
                // 存在但过期
                this.remove(name);
                return null;
            }
            return storages[name].value;
        } catch (error) {
            console.log('[ControlStorage] the error message: get field failed\n', error);
        }
    }
    
   /**
     *  移除对应缓存
     *  @param {string} name 缓存名称
    **/
    remove(name) {
        const storages = JSON.parse(localStorage.getItem(this.storageName))
        try {
            delete storages[name];
            if (JSON.stringify(storages) === '{}') {
            // 缓存字段为空对象时,删除该字段
            this.clear();
            return;
        }
        this.baseStorage.setItem(storages);
        } catch (error) {
            console.log('[ControlStorage] the error message: remove field failed\n', error);
        }
    }
    /**
     *  清除所有带过期时间的缓存
    **/
    clear() {
        localStorage.removeItem(this.storageName)
    }
}

export default new Storage();

2、实际调用 引入对应的Storage类 调用里面的方法传递对应参数

import storage from './js/storage.js'

...
setStorage() {
    // 5秒过期
    storage.set('name', 'ghkmmm', 5)
},
getStorage() {
    console.log(storage.get('name'))
},
removeStorage() {
    storage.remove('name')
},

 

标签:缓存,封装,name,自定义,过期,expires,localStorage,storages
From: https://www.cnblogs.com/le-cheng/p/17498009.html

相关文章

  • Android Kotlin Retrofit MVP网络请求封装(四)
    依赖implementation'com.squareup.retrofit2:retrofit:2.9.0'implementation'com.google.code.gson:gson:2.8.8'implementation'com.squareup.okhttp3:okhttp:4.9.1'implementation'com.squareup.retrofit2:retrof......
  • 【paramiko】基于paramiko封装SSH连接服务器执行命令
    1、官方文档paramiko·PyPIWelcometoParamiko’sdocumentation!—Paramikodocumentation 2、安装pipinstallparamiko 3、示例importparamiko#建立一个sshclient对象ssh=paramiko.SSHClient()#将信任的主机自动加入到host_allow列表,须放在connect......
  • WPF 自定义ListBox
    需求:ListBox只在选中时有相应的高亮颜色,光标悬浮或滑动时不显示高亮;以满足在触屏上时不会误导人操作…… 以下为实现代码:namespaceFrameControlLibrary{///<summary>///按照步骤1a或1b操作,然后执行步骤2以在XAML文件中使用此自定义控件。///......
  • (本地存储)localStorage
    1、存储数据 localStorage.setItem('name','张三')2、调取数据 localStorage.getItem('name')3、存储对象数据时需要用JSON.stringify()转换后再存储,调取时需要用JSON.parse()转换后在使用 存对象Obj constObj={        name:"张三", ......
  • 自定义Feign配置
    配置Feign日志有两种方式:配置文件方式和Java代码方式全局生效:(1)方式一:配置文件方式feign:client:config:default:#这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel:FULL#日志级别(2)方式二:Java代码方式需......
  • Flutter — 文本为什么可以被编辑?如何自定义编辑的行为?
    通过阅读本文,您将了解到知道在Flutter中关于文本的整体逻辑;可编辑文本包含哪些内容;如何自定义可编辑行为;如何优雅的实现文本表单。前言:在上一篇文章中,我们讲解了Flutter文本的组成部分和Flutter文本渲染到屏幕上的逻辑。文本的输出我们已经分析完成了,那么文本的输入又是怎么样的......
  • 直播开发app,css 自定义滚动条样式
    直播开发app,css自定义滚动条样式<divclass="content-wrap">  <div>    内容XXXX  </div> </div>  <style> //content-wrap样式.content-wrap{  flex:1;  overflow-y:scroll;  box-sizing:border-box;  padding:010px;  ......
  • WPF 自定义ComboBox
    需求:ComboBox下拉列表,在光标移出ComboBox后,下拉列表立即收起。 利用WPF的 自定义控件继承于ComboBox开发项目中需要的JComboBox,其代码如下:namespaceFrameWPF{///<summary>///按照步骤1a或1b操作,然后执行步骤2以在XAML文件中使用此自定义控件。......
  • 【Java】使用 validation 完成自定义校验注解
    总括:validation让我们简化了开发过程,可以使用简单的一个注解就实现了很多常见的检验数据的功能,同时支持自定义注解。spring-boot-starter-validation是由SpringBoot整合的一套用于处理 validation的约定化自动配置启动器。Spring系列框架通过简单的安装依赖即可直接使用......
  • 前端Vue自定义列表表格信息展示可用于商品规格参数展示
    前端Vue自定义列表表格信息展示可用于商品规格参数展示 ,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13131效果图如下:使用方法<!--table-list:表格数组数组里对象可自定义字段 --><cc-defineTable:table-list="tableArr"></cc-defin......