利用js-cookie实现前端设置缓存数据定时失效
一、背景
业务需要在前端进行数据的缓存,到期就删除再进行获取新数据。
二、实现过程
前端设置数据定时失效的可以有下面2种方法:
1、当数据较大时,可以利用localstorage,存数据时候写入一个时间,获取的时候再与当前时间进行比较
2、如果数据不超过cookie的限制大小,可以利用cookie比较方便,直接设置有效期即可。
3、更多(请大神指点)
利用localstorage实现
localstorage实现思路:
1、存储数据时加上时间戳
在项目开发中,我们可以写一个公用的方法来进行存储的时候加上时间戳
exportfunctionsetLocalStorageAndTime(key,value){
window.localStorage.setItem(key,JSON.stringify({data:value,time:newDate().getTime()}))
}
项目中应用
存储
//有数据再进行存储
setLocalStorageAndTime('XXX',{name:'XXX'})
读取
//判断是否返回为null或者失效
getLocalStorageAndTime('XXX',86400000)
2、获取数据时与当前时间进行比较
exportfunctiongetLocalStorageAndTime(key,exp=86400000){
//获取数据
letdata=window.localStorage.getItem(key)
if(!data)returnnull
letdataObj=JSON.parse(data)
//与过期时间比较
if(newDate().getTime()-dataObj.time>exp){
//过期删除返回null
removeLocalStorage(key)
console.log('信息已过期')
returnnull
}else{
returndataObj.data
}
}
利用cookie实现
我们用js-cookie这款插件来设置cookie,比较方便,可以自行查看文档。
js-cookie的示例中只有以天为单位的有效期:
Cookies.set('name','value',{expires:7});//7天后失效
官方文档只要设置天数,没有时分秒,这样我们想设置更小单位的时候无法下手,其实也可以设置时间戳来处理时间的,下面这种方式可以设置任意单位的有效期:
letseconds=10;
letexpires=newDate(newDate()*1+seconds*1000);
Cookies.set('username','tanggaowei',{expires:expires});//10秒后失效
贴上利用js-cookie的封装,记得npmijs-cookie
importCookiesfrom'js-cookie'
/*
*设置cookies
**/
exportfunctiongetCookies(key){
returnCookies.get(key)
}
/*
*设置Cookies
**/
exportfunctionsetCookies(key,value,expiresTime){
letseconds=expiresTime
letexpires=newDate(newDate()*1+seconds*1000)
returnCookies.set(key,value,{expires:expires})
}
/*
*移除Cookies
**/
exportfunctionremoveCookies(key){
returnCookies.remove(key)
}
三、总结
上面两个方法各有各的优点和缺点,如果小伙伴们有更好方法,麻烦留言互相学习
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。