首先在pom.xml中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
指明redis主机端口,这里我用的是虚拟机(docker)
spring:
redis:
port: 6379
host: 192.168.0.106
password: 123
关于redis在docker-compose中的配置文件,docker-compose.yml,我觉得也有必要在这里写一下:
version: '3'
services:
redis:
image: redis
container_name: redis
restart: always
ports:
- 6379:6379
volumes:
- ./config:/docker/config
- ./data:/data
command: redis-server /docker/config/redis.conf
这里我的文件tree:
我们需要额外配置的配置文件放在conf文件夹下面,redis.conf
内容如下,仅供参考,根据自己的需要进行配置:
#redis的databases数量
databases 32
#redis密码
requirepass 123
来写一个例子:
@GetMapping("/user/{id}")
public Users findUser(@PathVariable("id") Integer id){
RedisSerializer redisSerializer = new StringRedisSerializer();
rediss.setKeySerializer(redisSerializer);
Users u = (Users) rediss.opsForValue().get("key");
if(null == u){
synchronized (this){ //处理缓存穿透问题
if(u == null) {
u = usersDao.UserfindById(id);
rediss.opsForValue().set("key",u);
}
}
}
return u;
}
redisSerializer
这个是让键在显示的时候不是以序列化的形式显示,方便我们查看,上面的代码先是在redis中查找有没有key的键,如果有的话直接就返回了值,如果没有的话,先去数据库中查找,查找的结果放入redis中。这里加了synchronized
上了锁,是处理高并发的情况,高并发的时候,只需要一个人在数据库查找到了结果,其他的人就可以直接走缓存了。有效避免了数据库的压力。
在保存对象的时候,redis默认给你序列化,如果你想要把对象转化为json数据,需要修改redis默认的序列化器。