第09讲:Spring Data Redis(RedisTemplate)
一、什么是SpringDataRedis
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
spring-data-redis针对jedis提供了如下功能:
- 连接池自动管理,提供了一个高度封装的“RedisTemplate”类
- 针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
- ValueOperations:简单K-V操作
- SetOperations:set类型数据操作
- ZSetOperations:zset类型数据操作
- HashOperations:针对map类型的数据操作
- ListOperations:针对list类型的数据操作
二、API
在pom.xml中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.yml
spring:
redis:
port: 6379 # Redis服务器连接端口
host: 127.0.0.1 # Redis服务器地址
database: 0 # Redis数据库索引(默认为0)
password: # Redis服务器连接密码(默认为空)
timeout: 5000ms # 连接超时时间(毫秒)
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
server:
port: 8070
2.1、RedisTemplate的直接方法
//删除单个key
public void delete(String key){
redisTemplate.delete(key);
}
//删除多个key
public void deleteKey (String ...keys){
redisTemplate.delete(keys);
}
//指定key的失效时间
public void expire(String key,long time){
redisTemplate.expire(key,time,TimeUnit.MINUTES);
}
//根据key获取过期时间
public long getExpire(String key){
Long expire = redisTemplate.getExpire(key);
return expire;
}
//判断key是否存在
public boolean hasKey(String key){
return redisTemplate.hasKey(key);
}
2.2、操作String
2.2.1、添加缓存
@Test
public void t1(){
//方式1:通过redisTemplate设置值
redisTemplate.boundValueOps("StringKey").set("StringValue");
//同时设置过期时间
redisTemplate.boundValueOps("StringKey").set("StringValue",1, TimeUnit.MINUTES);
//方式2:通过BoundValueOperations设置值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
stringKey.set("StringVaule");
//同时设置过期时间
stringKey.set("StringValue",1, TimeUnit.MINUTES);
//方式3:通过ValueOperations设置值
ValueOperations ops = redisTemplate.opsForValue();
ops.set("StringKey", "StringVaule");
//同时设置过期时间
ops.set("StringValue","StringVaule",1, TimeUnit.MINUTES);
log.info("保存成功");
}
2.2.2、获取缓存值
@Test
public void t2(){
//方式1:通过redisTemplate设置值
String str1 = (String) redisTemplate.boundValueOps("StringKey").get();
log.info(str1);
//方式2:通过BoundValueOperations获取值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
String str2 = (String) stringKey.get();
//方式3:通过ValueOperations获取值
ValueOperations ops = redisTemplate.opsForValue();
String str3 = (String) ops.get("StringKey");
}
2.2.3、设置过期时间
@Test
public void t3(){
//方式1
redisTemplate.boundValueOps("StringKey").expire(1,TimeUnit.MINUTES);
//方式2
redisTemplate.expire("StringKey",1,TimeUnit.MINUTES);
}