背景

页面采用ajax获取数据时,每访问一次就会发送一次请求向服务端获取数据,可是呢。 有些数据更新的又不频繁,所以我就想着使用localStorage进行本地存储,然后在固定间隔时在去更新数据。(下载地址:https://gitee.com/whnba/data_storage)

结构设计

expires:用于保存数据到期时间

data:用于保存数据

{
expires: "到期时间"
data:"数据"
}

设置缓存数据

采用JSON把数据结构进行序列化保存,如果数据满了就全部清空吧。不然怎么办

    static set(key, value, expires = 3600) {
const date = new Date();
try {
localStorage.setItem(key, JSON.stringify({
expires: date.valueOf() + expires * 1000,
data: value
}));
} catch (e) {
if (e.name === 'QuotaExceededError') {
console.log("数据已满,自动清空");
Cache.clear();
Cache.set(key, value, expires);
}
}
}

获取缓存数据

先判断数据是否到期,如果没有到期就返回数据,反之删除。

    static get(key) {
const result = JSON.parse(localStorage.getItem(key));
const date = new Date();
if (result && result.expires > date) {
return result.data;
} else {
Cache.remove(key);
return null;
}
}

完整代码

/**
* 数据缓存
*/
class Cache { /**
* 获取缓存
* @param key
* @return {any}
*/
static get(key) {
const result = JSON.parse(localStorage.getItem(key));
const date = new Date();
if (result && result.expires > date) {
return result.data;
} else {
Cache.remove(key);
return null;
}
} /**
* 设置缓存
* @param {String} key 键名
* @param {any} value 缓存数据
* @param {Number} expires 过期时间 单位 s
*/
static set(key, value, expires = 3600) {
const date = new Date();
try {
localStorage.setItem(key, JSON.stringify({
expires: date.valueOf() + expires * 1000,
data: value
}));
} catch (e) {
if (e.name === 'QuotaExceededError') {
console.log("数据已满,自动清空");
Cache.clear();
Cache.set(key, value, expires);
}
}
} /**
* 删除键
* @param key
*/
static remove(key) {
localStorage.removeItem(key);
} /**
* 清空
*/
static clear() {
localStorage.clear();
}
} export default Cache;

采用localStorage做定时缓存的更多相关文章

  1. localstorage本地定时缓存

    在做一个网站时,起初直接就是从服务器获取数据进行交互,没有用一些本地缓存做优化,项目做下来就特别卡,并且对服务器造成了很大的压力,经过请教,查询,找到这样一个定时缓存的例子.html5定时缓存,从数据 ...

  2. web性能优化之--合理使用http缓存和localStorage做资源缓存

    一.前言 开始先扯点别的: 估计很多前端er的同学应该遇到过:在旧项目中添加新的功能模块.或者修改一些静态文件时候,当代码部署到线上之后,需求方验收OK,此时你送了一口气,当你准备开始得意于自己的ma ...

  3. 面localStorage用作数据缓存的简易封装

    面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...

  4. 《前端之路》之 Cookie && localStorage && Session Storage 缓存相关

    08: Cookie && localStorage && Session Storage 缓存相关 客户端.前端 存储 一. 起 因 首先解释下为什么想来写这个关于前 ...

  5. Stack Overflow是如何做应用缓存的

    首先要说下缓存是什么?缓存,就是在取出数据结果后,暂时将数据存储在某些可以快速存取的位置(例如各种NoSQL如Redis,HBase,又或MemoryCache等等),于是就可以让这些耗时的数据结果多 ...

  6. spring boot:使用caffeine+redis做二级缓存(spring boot 2.3.1)

    一,为什么要使用二级缓存? 我们通常会使用caffeine做本地缓存(或者叫做进程内缓存), 它的优点是速度快,操作方便,缺点是不方便管理,不方便扩展 而通常会使用redis作为分布式缓存, 它的优点 ...

  7. 怎么用php语言来做文件缓存

    使用缓存能够让我们的程序访问起来更加快速,缓存可以减少对数据库的操作,体验起来更好一些,对服务器的压力也小一些,当然服务速度很快 php文件执行完之后产生的解析完的数据,保存成静态的网页,下次打开的这 ...

  8. .NET WebAPI 采用 IDistributedCache 实现分布式缓存过滤器 Redis 模式

    分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护. 分布式缓存可以提高 ASP.NET Core 应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时. 与其 ...

  9. 使用redis做mysql缓存

    应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...

随机推荐

  1. locate home of running java application

    1. find the target process id of your java app jps [-lm] in my case: [lenmom@Mi- bin]$ jps -l sun.to ...

  2. 【mysql】添加删除权限

    https://www.cnblogs.com/wuxunyan/p/9095016.html

  3. asp.net Forms身份验证详解

    在做网站的时候,都会用到用户登录的功能.对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证.对于初学者,通常将用户登录信息存放在Session中,笔者在刚接触到asp.ne ...

  4. 修改ecshop的70种技巧

    1.如何修改网站”欢迎惠临本店”答复(dafu):languages\zh_cn\common.php文件中,$_LANG['welcome']=’欢迎惠临本店’:将他修改成你需要的字样. 2.如何修 ...

  5. 【Leetcode_easy】953. Verifying an Alien Dictionary

    problem 953. Verifying an Alien Dictionary solution: class Solution { public: bool isAlienSorted(vec ...

  6. 深度技术W10系统中绑定MAC地址和IP地址的设置技巧

    深度技术W10系统中绑定MAC地址和IP地址的设置技巧分享给大家,感兴趣的用户,请一起来了解下,以备以后作参考,具体如下:1.点击“开始——搜索”,输入CMD命令,然后在CMD上右键选择以管理员身份运 ...

  7. 【Tools】PDF编辑软件-pdfelement 6.8 官网文件中文+破解版本

    试用了下,感觉还不错分享给大家. 有币的求赏,小弟下载缺币.没币的从附件下载. 赏币地址:https://download.csdn.net/download/qq_18187161/10744059 ...

  8. Appium移动自动化测试-----(九) appium API 之应用操作

    1.安装应用 方法: installApp() 安装应用到设备中去.需要apk包的路径. driver.installApp("path/to/my.apk"); driver.i ...

  9. [转帖]运维必读:Linux 的内存分页管理

    运维必读:Linux 的内存分页管理 https://cloud.tencent.com/developer/article/1356431 内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在 ...

  10. .NET Core IOC AOP

    IOC简介 IOC思想 把类当做组件或服务来看待,组件内一定要高内聚,组件之间一定要低耦合,既然要保持低耦合,那就一定不要轻易的去new什么对象. 那组件之间的交互怎么处理呢?那最好的方式就是把new ...