Redis缓存与从数据取数据性能比较
为什么使用Redis
使用Redis缓存数据有多个原因,包括提高性能、降低数据库负载、减少响应时间和支持临时数据存储等。以下是一些主要原因以及Redis缓存的工作原理和好处:
1. 提高性能: 数据库查询通常是一个相对较慢的操作,特别是当数据库中的数据量很大时。通过将常用的数据存储在Redis缓存中,可以大大提高读取数据的速度,因为Redis以内存为基础,读写速度非常快。
2. 降低数据库负载: 当大量请求同时访问数据库时,数据库服务器的负载会增加。通过使用Redis缓存,可以减少对数据库的频繁查询,从而减轻数据库服务器的负载,提高其稳定性和可扩展性。
3. 减少响应时间: 缓存可以减少客户端请求的响应时间。当需要访问的数据已经在Redis缓存中存在时,不必执行昂贵的数据库查询,直接从缓存中获取数据,这可以显著减少响应时间。
4. 支持临时数据存储: Redis支持设置键的过期时间,这意味着您可以将数据存储在Redis中,并为其设置一个超时时间。这对于存储临时性数据非常有用,如会话数据、验证码等。一旦数据不再需要,它会自动从Redis中移除,不需要手动清理。
Redis的工作原理:
Redis是一个内存键值存储数据库,它将数据存储在内存中,因此读取和写入数据非常快速。以下是Redis的基本工作原理:
-
数据存储: Redis使用键值对的方式存储数据,每个键都关联一个特定的值。这些值可以是字符串、列表、集合、哈希表等。
-
内存存储: Redis将数据存储在内存中,这使得数据的读取和写入非常快速。但要注意,由于内存是有限的,因此Redis适用于相对较小的数据集。为了处理更大的数据集,可以使用Redis的持久化机制将数据定期写入磁盘。
-
缓存淘汰策略: 当Redis的内存用尽时,它可以根据一些缓存淘汰策略来自动清理不再使用的数据,以腾出内存空间。这可以防止内存溢出。
-
持久化: 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缓存速度确实会快很多