前言
Springboot2.0+版本中redis默认的客户端为lettuce,若要改用jedis的话需要自行排除lettuce包并引入jedis包,较为麻烦。因此还是推荐直接使用lettuce。
pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<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:
password: redis
timeout: 2000ms
cluster:
max-redirects: 5 #获取失败时最大重定向次数
nodes:
- 172.28.19.80:6380
- 172.28.19.80:6381
- 172.28.19.85:6380
- 172.28.19.85:6381
- 172.28.19.89:6380
- 172.28.19.89:6381
lettuce:
pool:
max-active: 50 #连接池最大连接数(使用负值表示没有限制)
max-idle: 10 #连接池中的最大空闲连接
max-wait: 1000ms #连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 5 #连接池中的最小空闲连接
代码示例
@Slf4j
@RestController
public class TestController {
@Autowired
private StringRedisTemplate redisTemplate;
// @Autowired
// private RedisTemplate<String, String> redisTemplate;
@GetMapping("/set")
public void set(){
redisTemplate.opsForValue().set("test.goods","电视");
// redisTemplate.boundValueOps("test.goods").set("电视");
}
@GetMapping("/get")
public String get(){
String result = redisTemplate.opsForValue().get("test.goods");
// String result = redisTemplate.boundValueOps("test.goods").get();
return result;
}
}
说明
1.redisTemplate注入
配置完成后对redis的操作就通过redisTemplate
对象完成,RedisTemplate
和StringRedisTemplate
均可以使用,网上有文章说两者混用的时候存储的对象在序列化和反序列化的时候会产生问题,我虽没有亲自进行实验,但所有操作还是统一一种实现方式比较好。
2.redisTemplate的使用
stringRedisTemplate.opsForValue();//操作字符串
stringRedisTemplate.opsForHash();//操作hash
stringRedisTemplate.opsForList();//操作list
stringRedisTemplate.opsForSet();//操作set
stringRedisTemplate.opsForZSet();//操作有序set
redisTemplate
是高度封装的redis对象,将客户端中大量api进行了归类封装,将同一类型操作封装到同一个operation接口。
redisTemplate.boundValueOps("key")
redisTemplate.boundHashOps("key")
redisTemplate.boundListOps("key")
redisTemplate.boundSetOps("key")
redisTemplate.boundZSetOps("key")
redisTemplate
还提供了对key的“bound”(绑定)便捷化操作API,可以通过bound封装指定的key,然后进行一系列的操作而无须“显式”的再次指定Key。(用法见代码示例)
3.缓存注解
另外,通过@EnableCaching
可以开启缓存注解,通过缓存注解可以很方便的对方法的返回值进行缓存,省去了直接对redis的操作。
-
@CacheConfig:作用于类上,定义数据访问对象中返回的内容存储在哪个缓存对象中,可以直接通过
@Cacheable
配置缓存集的名字来
定义,因此是非必须的注解。 -
@Cacheable:在方法执行前Spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;没有则调用方法并将方法返回值放进缓存。
-
@CachePut:将方法的返回值放到缓存中。它与
@Cacheable
不同的是,
它每次都会真实调用函数,所以主要用于数据新增和修改操作上。 -
@CacheEvict:删除缓存中的数据。通常用在删除法上,用来从缓存中移除相应数据。
网友评论