共计 2133 个字符,预计需要花费 6 分钟才能阅读完成。
一、为什么要应用 Redis?
- 性能极高 – Redis 读的速度是 110000 次 /s, 写的速度是 81000 次 /s ;
- 丰盛的数据类型 – Redis 反对 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作;
- 原子 – Redis 的所有操作都是原子性的,即要么胜利执行要么失败齐全不执行。单个操作是原子性的。多个操作也反对事务,即原子性,通过 MULTI 和 EXEC 指令包起来;
* 丰盛的个性 – Redis 还反对 publish/subscribe, key 过期等个性。
二、什么状况应该应用 Redis?
- 会话缓存 (如分布式应用存储 token 等);
- 计数器 (如一天之内明码输错了三次,主动锁定账户);
- 热点数据 (如排名等);
- 缓解数据库压力 (MyBatis 或 MyBatis-Plus 应用 Redis 做二级缓存);
- 定时器 (次要针对 redis 的 key 过期工夫)。
三、整合 Redis
1. 导入 Maven 依赖
<!-- Redis --> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-data-redis</artifactId> | |
</dependency> |
2. 配置文件 application.yml 批改
spring: | |
redis: | |
host: 127.0.0.1 | |
port: 6379 | |
password: |
3.Controller 测试 (可复用 SpringBoot 整合 MyBatis-Plus 例子)
package com.blog.tutorial.controller; | |
import com.blog.tutorial.entity.Users; | |
import com.blog.tutorial.service.UsersService; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.data.redis.core.RedisTemplate; | |
import org.springframework.util.StringUtils; | |
import org.springframework.web.bind.annotation.GetMapping; | |
import org.springframework.web.bind.annotation.RequestMapping; | |
import org.springframework.web.bind.annotation.RestController; | |
import java.util.List; | |
import java.util.concurrent.TimeUnit; | |
/** | |
* @description: | |
* @author: youcong | |
* @time: 2020/11/14 13:27 | |
*/@RestController | |
@RequestMapping("/user") | |
public class UserController { | |
@Autowired | |
private UsersService usersService; | |
@Autowired | |
private RedisTemplate redisTemplate; | |
@GetMapping("/list") | |
public String list() {System.out.println("list:"+redisTemplate.opsForValue().get("list")); | |
if (StringUtils.isEmpty(redisTemplate.opsForValue().get("list"))) {redisTemplate.opsForValue().set("list", usersService.list(), 360, TimeUnit.MINUTES); | |
} | |
return redisTemplate.opsForValue().get("list").toString();} | |
} |
4. 测试成果
申请接口,如下:
控制台,如下:
首次申请,会打印 SQL,再次申请只会输入 Redis 的 key,同时页面接口响应工夫十分快。
四、Redis 常见问题有哪些?
- 缓存和数据库双写一致性 (缓存的数据与数据库查问的数据不一样);
- 缓存雪崩 (即缓存同一时间大面积的生效,这个时候又来了一波申请,后果申请都怼到数据库上,从而导致数据库连贯异样);
- 缓存击穿 (黑客成心去申请缓存中不存在的数据,导致所有的申请都怼到数据库上,从而数据库连贯异样);
- 缓存并发竞争 (多个零碎同时 set 同一个 key,波及分布式锁)。
五、Java 的 Redis 框架有哪些?
- Jedis;
- Lettuce;
- Redisson。
对于上述框架应用,我在我的博客园写下如下几篇文章,感兴趣的能够看看:
SpringBoot 整合 Redisson\(单机版 \)
SpringBoot 实战 \(七 \) 之与 Redis 进行消息传递
SpringBoot 整合 Redisson\(集群版 \)
redis 集群搭建
Java 连贯 Redis 之 redis 的增删改查
网站性能优化小结和 spring 整合 redis
正文完