- 引入依赖
org.springframework.boot
spring-boot-starter-data-redis
- 配置Redis属性
在application.properties增加Redis服务的相关信息
#################redis单服务基础配置#################
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.0.24
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=1000
或者是修改application.yml
spring:
redis:
database: 0
host: 127.0.0.1
password:
port: 6379
- 使用StringRedisTemplate操作Redis
@RestController
@RequestMapping(path = "/api/redis" )
public class RedisController {
@Autowired
private StringRedisTemplate template;
@RequestMapping(value = "/get/{key}", method = RequestMethod.GET)
private String get(@PathVariable("key") String key){
return template.opsForValue().get(key);
}
@RequestMapping(value = "/set/{key}/{value}", method = RequestMethod.GET)
private Boolean set(@PathVariable("key") String key,@PathVariable("value") String value){
boolean flag = true;
try {
template.opsForValue().set(key,value);
} catch (Exception e) {
e.printStackTrace();
flag = false;
}
return flag;
}
}
StringRedisTemplate常用操作
//向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().set("test", "100", 60*10, TimeUnit.SECONDS);
//向redis里存入数据
stringRedisTemplate.opsForValue().set("test", "100");
//根据key获取缓存中的val
stringRedisTemplate.opsForValue().get("test");
//val做-1操作
stringRedisTemplate.boundValueOps("test").increment(-1);
//val +1
stringRedisTemplate.boundValueOps("test").increment(1);
//根据key获取过期时间
stringRedisTemplate.getExpire("test");
//根据key获取过期时间并换算成指定单位
stringRedisTemplate.getExpire("test", TimeUnit.SECONDS);
//设置过期时间
stringRedisTemplate.expire("test", 1000, TimeUnit.MILLISECONDS);
//根据key删除缓存
stringRedisTemplate.delete("test");
//检查key是否存在,返回boolean值
stringRedisTemplate.hasKey("test");
//向指定key中存放set集合
stringRedisTemplate.opsForSet().add("test", "1","2","3");
//根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().isMember("test", "1");
//根据key获取set集合
stringRedisTemplate.opsForSet().members("test");
RedisTemplate中定义了5种数据结构操作
redisTemplate.opsForValue(); //操作字符串
redisTemplate.opsForHash(); //操作hash
redisTemplate.opsForList(); //操作list
redisTemplate.opsForSet(); //操作set
redisTemplate.opsForZSet(); //操作有序set
StringRedisTemplate与RedisTemplate区别
- 两者的关系是StringRedisTemplate继承RedisTemplate。
- 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
- 其实他们两者之间的区别主要在于他们使用的序列化类:
RedisTemplate使用的是JdkSerializationRedisSerializer 存入数据会将数据先序列化成字节数组然后在存入Redis数据库。
StringRedisTemplate使用的是StringRedisSerializer
- 使用时注意事项:
当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。
但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
- RedisTemplate使用时常见问题:
redisTemplate 中存取数据都是字节数组。当redis中存入的数据是可读形式而非字节数组时,使用redisTemplate取值的时候会无法获取导出数据,获得的值为null。可以使用 StringRedisTemplate 试试。