利用js-cookie和localStore插件实现前端设置缓存数据定时失效

(转载)https://www.jb51.net/article/163289.htm
一、背景

业务需要在前端进行数据的缓存,到期就删除再进行获取新数据。

二、实现过程

前端设置数据定时失效的可以有下面2种方法:

1、当数据较大时,可以利用localstorage,存数据时候写入一个时间,获取的时候再与当前时间进行比较
2、如果数据不超过cookie的限制大小,可以利用cookie比较方便,直接设置有效期即可。
3、更多(请大神指点)

利用localstorage实现

localstorage实现思路:

1、存储数据时加上时间戳

在项目开发中,我们可以写一个公用的方法来进行存储的时候加上时间戳
export function setLocalStorageAndTime (key, value) {
window.localStorage.setItem(key, JSON.stringify({ data: value, time: new Date().getTime() }))
}

项目中应用

存储
// 有数据再进行存储
setLocalStorageAndTime(‘XXX’, {name: ‘XXX’})

读取
/ 判断是否返回为null或者失效
getLocalStorageAndTime(‘XXX’, 86400000)

2、获取数据时与当前时间进行比较

export function getLocalStorageAndTime (key, exp = 86400000) {
// 获取数据
let data = window.localStorage.getItem(key)
if (!data) return null
let dataObj = JSON.parse(data)
// 与过期时间比较
if (new Date().getTime() - dataObj.time > exp) {
// 过期删除返回null
removeLocalStorage(key)
console.log(‘信息已过期’)
return null
} else {
return dataObj.data
}
}

利用cookie实现

我们用js-cookie这款插件来设置cookie,比较方便,可以自行查看文档。

js-cookie 的示例中只有以天为单位的有效期:
1

Cookies.set(‘name’, ‘value’, { expires: 7 }); // 7 天后失效

官方文档只要设置天数,没有时分秒,这样我们想设置更小单位的时候无法下手,其实也可以设置时间戳来处理时间的,下面这种方式可以设置任意单位的有效期:

let seconds = 10;
let expires = new Date(new Date() * 1 + seconds * 1000);
Cookies.set(‘username’, ‘tanggaowei’, { expires: expires }); // 10 秒后失效

贴上利用js-cookie的封装, 记得 npm i js-cookie
import Cookies from ‘js-cookie’

/*

  • 设置cookies
  • /
    export function getCookies (key) {
    return Cookies.get(key)
    }
    /
  • 设置Cookies
  • /
    export function setCookies (key, value, expiresTime) {
    let seconds = expiresTime
    let expires = new Date(new Date() * 1 + seconds * 1000)
    return Cookies.set(key, value, { expires: expires })
    }
    /
  • 移除Cookies
  • */
    export function removeCookies (key) {
    return Cookies.remove(key)
    }

import Cookies from ‘js-cookie’

/*

  • 设置cookies
  • /
    export function getCookies (key) {
    return Cookies.get(key)
    }
    /
  • 设置Cookies
  • /
    export function setCookies (key, value, expiresTime) {
    let seconds = expiresTime
    let expires = new Date(new Date() * 1 + seconds * 1000)
    return Cookies.set(key, value, { expires: expires })
    }
    /
  • 移除Cookies
  • */
    export function removeCookies (key) {
    return Cookies.remove(key)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值