axios 请求的缓存封装
前言
咱们的网站或者程序,每一个页面和操作都需要请求后端接口来获取响应和渲染页面,抛开post请求方式的接口不说,部分get请求得到的数据,短时间内不会更新,或者短时间得到的响应数据不会变化,这个时候就可以把从接口得到的数据缓存下来,下次刷新或者是请求接口的时候,就不用请求接口,从而大幅度提高用户体验。
当然,如果服务器的流量很多且兆宽也比较大,可以自动忽略。
不过自研小网站,或者资讯类、文字类数据量比较大的程序就可以完全利用起来了。
实现
storage.ts
- 首先肯定是需要缓存的工具类,来直接使用
/*** 封装操作localstorage本地存储的方法*/
export const storage = {//存储set(key: string, value: any, expires: number) {const obj = {value: value,expires: expires,//有效时间startTime: new Date().getTime() // 记录存储数据的时间,转换为毫秒值存下来}// 判断是否设置了有效时间if (obj.expires) {// 如果设置了时间,把obj转换数据类型转换为字符串对象存起来localStorage.setItem(key, JSON.stringify(obj))}else {// 如果没有设置有效时间,直接把value值存进去localStorage.setItem(key, JSON.stringify(obj.value))}},//取出数据get<T>(key: string) {// 先定义一个变量临时存放提取的值const temp = <T>JSON.parse(localStorage.getItem(key))// 判断有没有设置expires属性// 如果有,就需要判断是否到期了if (temp && temp != "undefined" && temp != "null" && temp.expires ) {let data = new Date().getTime()if (data - temp.startTime > temp.expires) {// 此时说明数据已过期,清除掉localStorage.removeItem(key)// 直接returnreturn}else {// 如果没有过期就输出return temp.value}}else {// 如果没有设置,直接输出return temp}},// 删除数据remove(key: string) {localStorage.removeItem(key)}
};/*** 封装操作sessionStorage本地存储的方法*/
export const sessionStorage = {//存储set(key: string, value: any) {window.sessionStorage.setItem(key, JSON.stringify(value))},//取出数据get<T>(key: string) {const value = window.sessionStorage.getItem(key)if (value && value != "undefined" && value != "null") {return JSON.parse(value)}return null},// 删除数据remove(key: string) {window.sessionStorage.removeItem(key)}
}
cacheAxios.ts
- 其实就是将自己的
axios请求做个处理,请求的时候用封装的工具请求类即可 - 我举例的是
localStorage,大家可以根据自行需要来使用sessionStorage sessionStorage就没有cacheTime了,可以自行设置
import axios from '@/utils/axios'
import { storage } from '@/utils/storage'interface optionsFace {isCache?: boolean; // 是否缓存cacheKey?: string; // 缓存key值cacheTime?: number; // 缓存默认值 默认为3天 86400 * 3,单位秒
}const request = async (config: any, {isCache = false, cacheKey, cacheTime = 86400 * 3}: optionsFace) => {// 判断是否需要缓存数据,if (isCache) {const cacheData = storage.get(cacheKey)if (cacheData) {// 有缓存数据直接返回return new Promise((resolve) => {resolve(cacheData)})}else {const resData = await axios(config)// 根据自己的接口来判断if (resData.code != 0) {storage.set(cacheKey, resData, cacheTime * 1000)}// 返回结果return new Promise((resolve) => {resolve(resData)})}} else {return axios(config)}
}export default request
api.ts
- 接口工具类,使用方式就都一模一样的
// 使用封装的缓存axios
import request from '@/utils/cacheAxios';/*** 功能:获取 列表*/
export const getList = (params: Object, options: Object) => {return request({url: '/Wikipedia/getList',method: 'get',params: params}, options);
};
页面使用
/*** 功能:获取 首页数据*/
const getHome = () => {// 这里的cacheKey,可以拼接上页码// const cacheKey = 'homeData' + pageCurrent// 配置里还有个时间参数,工具类里是默认3天,可以自行设置getList({}, {isCache: true, cacheKey: 'homeData'}).then(res => {// 逻辑处理、即使是缓存得到的数据也是一样的,不会影响业务处理})
}
小结
- 很多人可能不会使用这个多余的操作,可是我自研了中小型网站,很多数据需要频繁渲染,且数据都是一样的,所以需要如此来降低服务器的成本和前端体验
- 缓存的数据,建议是列表类数据,全是明文的,这样即使别人拿到也没用
- 本文是基于
vue,不过react、小程序、uniapp改一下同样适用
相关文章:
axios 请求的缓存封装
前言 咱们的网站或者程序,每一个页面和操作都需要请求后端接口来获取响应和渲染页面,抛开post请求方式的接口不说,部分get请求得到的数据,短时间内不会更新,或者短时间得到的响应数据不会变化,这个时候就可…...
Oracle性能调优实践中的几点心得
很多的时侯,做OracleDBA的我们,当应用管理员向我们通告现在应用很慢、数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各种命种率都是满足Oracle文…...
勒索病毒最新变种.halo勒索病毒来袭,如何恢复受感染的数据?
引言: 在当今数字化时代,勒索病毒的威胁不断升级,其中.halo勒索病毒引起了广泛关注。本文91数据恢复将深入研究.halo勒索病毒的特点,探讨如何有效地恢复被其加密的数据文件,并分享预防这一威胁的关键措施。 .halo勒索…...
大厂秋招真题【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组
文章目录 【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组题目描述与示例题目描述输入描述输出描述示例输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组 题目描…...
bazel远程构建(Remote Execution) --- linux安装Redis
采用源码安装方式 下载地址:Download | Redis,下载最新稳定版本。 step1: 下载最新稳定版本 wget https://download.redis.io/redis-stable.tar.gz step2: 解压安装 tar -xzvf redis-stable.tar.gz cd redis-stable make 执行完 make 命令后&#…...
Maven在开发中的使用及理解
在JAVA项目中,我们通常需要对项目的构建和依赖进行管理,这个时候我们就需要MAVEN来对项目进行支持。 一.MAVEN构建 在整个MAVEN构建的过程中包含以下环节,也对应IDEA中MAVEN的对应功能。 清理Maven Clean 清理,则代表删除上一…...
2023/10/30-LED灯驱动开发
k1.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include "head.h" char kbuf[128] {}; unsigned int major; //定义三个指针指向映射后的虚拟内…...
华为OD 报文解压缩(100分)【java】B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
二、vue基础语法
一、模板语法 1、文本渲染 使用双花括号语法插入文本 <template><div><h3>msg: {{ message }}</h3></div> </template><script> export default {data() {return {message: "输出信息"}} } </script><style s…...
Java —— 程序逻辑控制
目录 1. 顺序结构 2. 分支结构 2.1 if 语句 2.1.1 语法格式1 2.1.2 语法格式2 2.1.3 语法格式3 2.2 switch 语句 3. 循环结构 3.1 while循环 3.2 break与continue 3.3 for循环 4. 输入输出 4.1 输出到控制台 格式化字符串 4.2 从键盘输入 5. 练习 和C语言类似地, Java的程序逻辑…...
I - Bob vs ATM(博弈论)
传送门:nefu_10-18 - Virtual Judge (vjudge.net) 思路: nim游戏的变形。 (())相当于在一堆n个石子中取任意个,sg(n)n; ((()))(())(),相当于可以在3堆石子分别为3&am…...
请解释一下 CSS3 的 Flexbox(弹性盒布局模型), 以及适用场景?
解析: CSS3的Flexbox(弹性盒布局模型)是一种强大的布局技术,用于创建灵活和响应式的布局。它解决了传统CSS布局模型在垂直和水平居中、等高列、自适应宽度等方面的一些挑战,使开发人员能够更轻松地构建各种复杂的布局。在下面的详…...
MYSQL 根据唯一索引键更新死锁问题
mysql 死锁问题及死锁权重分析 问题发生过程:1、生产发现死锁一次 语句为sql1:UPDATE table set data ‘123’ where business_no ABC; 该行数据的id1, business_no ABC tablbe 字段 id:主键 business_no为唯一索引字段,其…...
Appium+python+unittest搭建UI自动化框架!
阅读本小节,需要读者具备如下前提条件: 1. 掌握一种编程语言基础,如java、python等。 2. 掌握一种单元测试框架,如java语言的testng框架、python的unittest框架。 3. 掌握目前主流的UI测试框架,移动端APP测试框架Appiu…...
使用kubekey部署k8s集群和kubesphere、在已有k8s集群上部署kubesphere
目录 前言什么是kubekey(简称kk)单节点上安装 kubesphere(all in one 快速熟悉kubesphere)部署 kubernetes和和kubesphere 多节点安装部署 kubernetes和和kubesphere 离线安装k8s v1.22.17和kubesphere v3.3.2联网-在已有k8s集群上…...
React useMemo useCallback useEffect 的区别(保姆级教程)
因个人工作原因,在2023年学起了React TS 这个 “前端大佬” “高阶玩家” 标配的技术栈,一套学习下来个人总结就是:React真特么难用!传染病式的渲染逻辑是真让人难受!维护之前的代码就是深渊!难怪React项目…...
网络安全中的人工智能:优点、缺点、机遇和危险
2022 年秋天,人工智能在商业领域爆发,引起了轰动,不久之后,似乎每个人都发现了 ChatGPT 和 DALL-E 等生成式 AI 系统的新的创新用途。世界各地的企业开始呼吁将其集成到他们的产品中,并寻找使用它来提高组织效率的方法…...
36 机器学习(四):异常值检测|线性回归|逻辑回归|聚类算法|集成学习
文章目录 异常值检测箱线图z-score 保存模型 与 使用模型回归的性能评估线性回归正规方程的线性回归梯度下降的线性回归原理介绍L1 和 L2 正则化的介绍api介绍------LinearRegressionapi介绍------SGDRegressor 岭回归 和 Lasso 回归 逻辑回归基本使用原理介绍正向原理介绍损失…...
maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories
前言 略 说明 新设备上安装了mvn 3.8.5,编译新项目出错: [ERROR] Non-resolvable parent POM for com.admin.project:1.0: Could not transfer artifact com.extend.parent:pom:1.6.9 from/to maven-default-http-blocker (http://0.0.0.0/): Bl…...
盒式交换机堆叠配置
目录 1.配置环形拓扑堆叠 2.设备组建堆叠 3.设备组件堆叠 堆叠 istack,是指将多台支持堆叠特性的交换机设备组合在一起,从逻辑上组合成一台交换设备。如图所示,SwitchA与 SwitchB 通过堆叠线缆连接后组成堆叠 istack,对于上游和…...
终极指南:如何用MAA明日方舟助手彻底解放你的游戏时间
终极指南:如何用MAA明日方舟助手彻底解放你的游戏时间 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://git…...
Ubuntu 安装CUDA 教程
一、 cuda下载链接 CUDA Toolkit 13.0 Downloads | NVIDIA Developer 二、 cuda安装命令 顺序执行下面的命令 1 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin 2 sudo mv cuda-ubuntu2204.pin /etc/apt/preferen…...
13款降AI工具实测:AI率80%怎么降,降重鸟登顶
上周答辩前一天,室友被老师点名:AI率80%,我俩连夜自救,才发现降重鸟能稳住局面,我一边咖啡续命一边吐槽学校查得比期末还狠。 多平台对标实测:一键选库,针对性降AI率 降重鸟地址:h…...
【收藏备用】2026年大模型岗位拆解+零基础入门指南,程序员转型/小白入行必看(附全套学习资料)
2026年作为AI大模型应用全面爆发的关键一年,这项技术早已跳出实验室的局限,深度融入互联网、金融、医疗、自动驾驶等各个行业,成为程序员突破职业瓶颈、小白零基础入行的黄金赛道🔥 相信很多人都有这样的困惑:“大模型…...
从拒稿到接收:我如何通过优化论文格式让Journal of Intelligent Fuzzy Systems审稿人眼前一亮
从拒稿到接收:学术论文格式优化的实战经验分享 第一次收到Journal of Intelligent & Fuzzy Systems的拒稿邮件时,我盯着屏幕足足五分钟——不是因为研究内容被质疑,而是审稿人那句"图表分辨率不足,引用格式混乱"让我…...
WPF依赖属性三大回调实战:从PropertyChanged到Validate,一个真实案例讲透
WPF依赖属性三大回调实战:从PropertyChanged到Validate,一个真实案例讲透 在WPF开发中,依赖属性是实现数据绑定、样式和动画等功能的核心机制。但很多开发者在自定义控件时,往往只停留在基础用法上,对依赖属性的三大回…...
告别反射!用xLua在Unity里优雅地让C#和Lua互传数据(附完整代码示例)
告别反射!用xLua在Unity里优雅地让C#和Lua互传数据 在Unity游戏开发中,脚本语言的灵活性与原生代码的性能往往需要权衡。传统反射调用虽然能实现C#与Lua的交互,但性能开销大、代码维护困难。xLua作为腾讯开源的跨语言解决方案,通过…...
三步快速对接 gpt-image-2 图像生成 API 教程
前言 gpt-image-2 是当下高性能 AI 图像生成模型,支持自定义尺寸、风格定制、批量生成等能力,接口规范完全标准化、兼容主流开发生态。 本文基于官方 Apifox 接口文档,以 https://api.aaigc.top 为统一请求域名,整理极简三步对接…...
InkOS:基于多Agent协作与长期记忆的AI小说创作系统深度解析
1. 项目概述:一个能自主写小说的AI Agent如果你对AI写作的印象还停留在“输入一句话,生成一段文”的简单工具,那么InkOS可能会颠覆你的认知。这不是一个玩具,而是一个拥有完整创作管线、具备长期记忆和自主审计能力的“小说创作AI…...
MATLAB仿真研究:微环谐振腔光学频率梳及LLE方程的求解与扩展性分析——考虑色散、克尔非线...
微环谐振腔的光学频率梳matlab仿真 微腔光频梳仿真 包括求解LLE方程(Lugiato-Lefever equation)实现微环中的光频梳,同时考虑了色散,克尔非线性,外部泵浦等因素,具有可延展性。一、代码体系与核心定位 本次…...
