一、为什么要应用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
发表回复