Redis缓存与从数据取数据性能比较

Redis缓存与从数据取数据性能比较

为什么使用Redis

使用Redis缓存数据有多个原因,包括提高性能、降低数据库负载、减少响应时间和支持临时数据存储等。以下是一些主要原因以及Redis缓存的工作原理和好处:

1. 提高性能: 数据库查询通常是一个相对较慢的操作,特别是当数据库中的数据量很大时。通过将常用的数据存储在Redis缓存中,可以大大提高读取数据的速度,因为Redis以内存为基础,读写速度非常快。

2. 降低数据库负载: 当大量请求同时访问数据库时,数据库服务器的负载会增加。通过使用Redis缓存,可以减少对数据库的频繁查询,从而减轻数据库服务器的负载,提高其稳定性和可扩展性。

3. 减少响应时间: 缓存可以减少客户端请求的响应时间。当需要访问的数据已经在Redis缓存中存在时,不必执行昂贵的数据库查询,直接从缓存中获取数据,这可以显著减少响应时间。

4. 支持临时数据存储: Redis支持设置键的过期时间,这意味着您可以将数据存储在Redis中,并为其设置一个超时时间。这对于存储临时性数据非常有用,如会话数据、验证码等。一旦数据不再需要,它会自动从Redis中移除,不需要手动清理。

Redis的工作原理:

Redis是一个内存键值存储数据库,它将数据存储在内存中,因此读取和写入数据非常快速。以下是Redis的基本工作原理:

  1. 数据存储: Redis使用键值对的方式存储数据,每个键都关联一个特定的值。这些值可以是字符串、列表、集合、哈希表等。

  2. 内存存储: Redis将数据存储在内存中,这使得数据的读取和写入非常快速。但要注意,由于内存是有限的,因此Redis适用于相对较小的数据集。为了处理更大的数据集,可以使用Redis的持久化机制将数据定期写入磁盘。

  3. 缓存淘汰策略: 当Redis的内存用尽时,它可以根据一些缓存淘汰策略来自动清理不再使用的数据,以腾出内存空间。这可以防止内存溢出。

  4. 持久化: Redis支持持久化,可以将数据保存到磁盘,以便在服务器重启时恢复数据。有两种主要的持久化方式:RDB快照和AOF日志。

数据测试

单独从数据取8000左右条数据

单独从数据库读取

接口代码

@GetMapping("/get")public BaseResponse<List<Sentences>> get(){System.out.println(UserHolder.getValue());return ResultUtils.success(sentencesService.list());}

直接读取的速度如图

在这里插入图片描述

利用Redis读取

接口逻辑:如果是首次获取那么从数据库获取,从数据库获取后会把数据返回给前端,同时会把数据存储到Redis中进行缓存。而如果Redis中有数据的话,那么就会直接从Redis中提取数据,并且返回给前端。

接口代码:

 @GetMapping("/getByRedis")public BaseResponse<List<Sentences>> getByRedis(){System.out.println(UserHolder.getValue());String sentencesConstant = "test:redis:sentences";List<Sentences> sentencesList = (List<Sentences>)redisTemplate.opsForValue().get(sentencesConstant);if(sentencesList == null || BeanUtil.isEmpty(sentencesList)){List<Sentences> result = sentencesService.list();redisTemplate.opsForValue().set(sentencesConstant,result,30, TimeUnit.MINUTES);return ResultUtils.success(result);}redisTemplate.expire(sentencesConstant,30,TimeUnit.MINUTES);return ResultUtils.success(sentencesList);}

第一次请求所用时间

在这里插入图片描述

第二、三次

在这里插入图片描述
在这里插入图片描述

这样子利用Redis缓存速度确实会快很多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

睿趣科技:抖音开一家网店大概什么时候回本

随着移动互联网的迅猛发展&#xff0c;社交媒体平台如抖音成为了商家推广产品和服务的热门渠道之一。许多人都希望能够通过在抖音上宣传自己的产品&#xff0c;甚至考虑开一家网店&#xff0c;但回本的时间是一个关键问题。本文将探讨抖音开一家网店大概什么时候回本的问题。 首…

Ubuntu系统下载及安装教程

史上最全最新Ubuntu安装教程&#xff08;图文&#xff09; - 知乎 (说明&#xff1a;本教程介绍的是安装DeskTop版的系统) 1.官网下载镜像 官方网址: https://ubuntu.com/#download进入官网后会有最新版本的镜像下载地址&#xff0c;如果需要下载最新版本&#xff0c;直接点…

Git_06_创建分支/查看分支

创建分支 # 创建分支的同时&#xff0c;切换到该分支上 > git checkout -b 分支名称 # > git push origin 分支名称查看分支 # 查看本地分支 > git branch # 查看远程分支 > git branch -r # 查看所有分支 > git branch -a删除分支 # 删除本地分支 > git …

js同级弹窗实现数据传输修改

window.postMessage 是一种用于实现跨窗口通信的 HTML5 特性。它允许在不同窗口或 iframe 之间安全地传递数据&#xff0c;即使这些窗口来自不同的域名。 window.postMessage 方法接受两个参数&#xff1a; message&#xff1a;要发送的消息&#xff0c;可以是一个字符串或一…

为何学linux及用处

目前企业使用的操作系统无非就是国产类的&#xff0c;windows和linux类。我们要提升自己的技能&#xff0c;需要学习这两款。我记得在大学时期&#xff0c;学习过windows以及linux&#xff0c;但当时觉得又不常用&#xff0c;就学的模棱两可。毕业之后&#xff0c;你会发现&…

分布式应用之监控平台zabbix的认识与搭建

一、监控系统的相关知识 1.1 监控系统运用的原因 当我们需要实时关注与其相关的各项指标是否正常&#xff0c;往往存在着很多的服务器、网络设备等硬件资源&#xff0c;如果我们想要能够更加方便的、集中的监控他们&#xff0c;zabix可以实现集中监控管理的应用程序 监控的…

在Anaconda中安装xgboost(简单高效)

文章目录 一、检查二、打开Anaconda Prompt三、安装四、验证 一、检查 前提条件&#xff1a;windows环境下&#xff0c;anaconda&#xff08;这里指的是Anaconda3&#xff09;已安装&#xff0c;相应的numpy和sicpy也已安装。如果未安装需要先安装这两个库。 二、打开Anaconda…

RapidSSL的便宜单域名https证书

RapidSSL是Geotrust https证书品牌中的一款入门级https证书品牌&#xff0c;目前属于Digicert的子品牌。它是一款提供高性价比和广泛适用范围的https证书&#xff0c;无论是个人还是企业用户都可以轻松申请并快速验证。今天就随SSL盾小编了解RapidSSL旗下的单域名https证书。 …

Redis分布式锁的实现方式、实现原理

目录 一、分布式锁的重要性与挑战1.1 分布式系统中的并发问题竞态条件数据不一致死锁 二、分布式锁的基本原理与实现方式2.1 分布式锁的基本概念2.2 基于数据库的分布式锁原理与实现方式优缺点 2.3 基于缓存的分布式锁原理与实现方式优缺点 三、Redis分布式锁的实现与使用3.1 使…

安科瑞电流隔离传感器 BA穿孔交流电流变送器-安科瑞黄安南

一.产品原理和功能介绍 BA系列产品应用电磁感应原理&#xff0c;对电网中的交流电流进行实时测量&#xff0c;采用精密恒流技术和线性温度补偿技术&#xff0c;将其隔离变换为标准的直流信号输出 采用24伏或12伏安全电压供电&#xff0c;具有过载能力强、高精度、高隔离、高安…

Talk | ICCV’23 清华赵天辰:Ada3D-基于动态推理的3D感知模型压缩及软硬件协同优化

​本期为TechBeat人工智能社区第533期线上Talk&#xff01; 北京时间9月21日(周四)20:00&#xff0c;清华大学博士生—赵天辰的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “Ada3D-基于动态推理的3D感知模型压缩及软硬件协同优化”&#xff0c;他…

JavaScript学习记录 | DOM事件流 事件冒泡-事件捕获-事件委托

目录 DOM事件流常见面试题事件冒泡与事件捕获事件冒泡使用场景事件捕获使用场景事件冒泡和事件捕获区别 事件委托 - 利用事件冒泡机制事件委托应用场景支持事件委托的事件事件委托的优缺点 DOM事件流 DOM事件流的三个阶段&#xff1a;捕获阶段 -> 目标阶段 -> 冒泡阶段 …

attrib和attrs

attrib和attrs是Python库attrs中的两个重要函数。 attrib函数用于定义类的属性&#xff0c;它接受一个或多个参数来定义属性的名称、类型和默认值等。通过使用attrib函数&#xff0c;可以简化属性的定义过程&#xff0c;使代码更加简洁和易读。 attrs函数用于定义类&#xff…

浏览器报错内容:Provisional headers are shown

浏览器报错内容&#xff1a;Provisional headers are shown 如下图&#xff1a; 解决方法&#xff1a;nginx 443 启用HTTP/2模式&#xff0c;如下图&#xff1a; server {listen 443 ssl http2;server_name callcenterda.umworks.com;client_max_body_size 200M;ssl_session_…

死锁详细解读

目录 死锁&#xff08;1&#xff09; 一、死锁的定义 二、产生死锁的原因 三、产生死锁的四个必要条件 四、解决死锁的方法 死锁&#xff08;2&#xff09; 第三节 死锁避免 一、死锁避免的概念 二、安全状态与安全序列 三、银行家算法 第四节、死锁的检测与解除 …

Python 打印所有水仙花数

"""打印三位水仙花数介绍&#xff1a;水仙花数是指一个 n 位数&#xff0c;它的每个位上的数字的 n 次幂之和等于它本身。例如&#xff0c;153 是一个三位的水仙花数&#xff0c;因为 (1**3) (5**3) (3**3) 153。下面是一个 Python 程序&#xff0c;用于生成…

LabVIEW开发基于物联网的多功能功率分析仪

LabVIEW开发基于物联网的多功能功率分析仪 根据技术规则&#xff0c;电气元件网络中的单个被创建为在标称正弦波振动制造频率下运行。失真顺序的电流和电压波与正弦波不同&#xff0c;它们或多或少地扭曲成形状。它是由交流网络中非线性组件的存在引起的&#xff0c;例如静态转…

【C++】泛型算法(四)使用顺序性容器

一、顺序性容器 顺序性容器用来维护一组有序、类型相同的元素。 主要是&#xff1a;vector和list。 1.vector vector是用一块连续的内存存放数据&#xff1b;vector进行随机访问&#xff0c;效率比较高&#xff08;适合数列&#xff09;&#xff1b;vector对于插入和删除操作…

32:TX Text Control ActiveX/ASP.NET/WinForms/WPF Crack

TX Text Control ActiveX 32.0 添加操作“普通”样式表的能力。 2023 年 9 月 14 日 - 15:38新版本 特征 脚注- 在文档中插入与 Microsoft Word 兼容的脚注。脚注是一种文字处理功能&#xff0c;允许用户在页面底部插入附加信息。 可编辑的[普通]样式表- 添加了操作[普通]样式的…

为什么tomcat要自定义线程池实现?

背景 最近在研究tomcat调优的问题&#xff0c;开发人员做过的最多的tomcat调优想必就是线程池调优了&#xff0c;但是tomcat并没有使用jdk自己的线程池实现&#xff0c;而是自定了了线程池&#xff0c;自己实现了ThreadPoolExecutor类位于org.apache.tomcat.util.threads包下 …