• 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());
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    直接读取的速度如图

    在这里插入图片描述

    利用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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    第一次请求所用时间

    在这里插入图片描述

    第二、三次

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

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

  • 相关阅读:
    Spring Cache缓存原理与Redis实践
    ts泛型,映射,条件类型和类型提取infer和一些常用工具库的说明
    关于ip地址的网页无法访问navigator的gpu、媒体、蓝牙等设备的解决方法
    node.js学习之http模块笔记
    JuiceFS-开源分布式文件系统入门(一篇就够了)
    kotlin 集合 list map 数组
    # 解析Pikachu靶场:一个安全研究的练习场
    使用realsense D435i实现机械臂对物体的自动抓取总结
    【毕业季·进击的技术er】这三年来的风风雨雨,喜怒哀乐,坎坎坷坷,朝朝暮暮……都是那么美好,那么令人难以忘记。
    Ubuntu下怎么配置vsftpd
  • 原文地址:https://blog.csdn.net/Go_ahead_forever/article/details/133168920