springboot中redis正确的使用详解
SpringBoot中使用Redis可以更方便地进行缓存管理和持久化存储。正确的使用Redis可以提高应用程序的效率和性能。本文将详细介绍SpringBoot中Redis的正确使用方法:
一、引入Redis依赖
SpringBoot中使用Redis需要引入相关依赖,可以在pom文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.5.RELEASE</version>
</dependency>
二、配置Redis
在application.properties或application.yml文件中添加Redis的配置信息:
#### application.properties
# Redis服务器地址 spring.redis.host=localhost # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(默认为8) spring.redis.lettuce.pool.max-active=8 # 连接池最大阻塞等待时间(默认为-1,表示没有限制) spring.redis.lettuce.pool.max-wait=-1ms # 连接池最大空闲连接数(默认为8) spring.redis.lettuce.pool.max-idle=8 # 连接池最小空闲连接数(默认为0) spring.redis.lettuce.pool.min-idle=0
#### application.yml
spring:
redis:
# Redis服务器地址
host: localhost
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
password:
# 连接池最大连接数(默认为8)
lettuce:
pool:
max-active: 8
# 连接池最大阻塞等待时间(默认为-1,表示没有限制)
max-wait: -1ms
# 连接池最大空闲连接数(默认为8)
max-idle: 8
# 连接池最小空闲连接数(默认为0)
min-idle: 0
三、配置RedisTemplate
在Spring中,可以使用RedisTemplate对Redis进行操作,因此需要对RedisTemplate进行配置:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
redisTemplate.setValueSerializer(serializer);
//使用StringRedisSerializer来序列化和反序列化redis的key值
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
在配置类中,需要创建一个RedisTemplate对象,并配置其序列化和反序列化方式。在这里我们使用了Jackson2JsonRedisSerializer来序列化和反序列化redis的value值,它可以支持任何Java对象的序列化和反序列化。同时,使用StringRedisSerializer来序列化和反序列化redis的key值。
四、使用RedisTemplate
配置完RedisTemplate后,就可以使用它来对Redis进行操作了,以下是RedisTemplate的常用方法:
#### set(key, value)
设置缓存,key为字符串类型,value为任意类型。
redisTemplate.opsForValue().set("name", "Tom");
#### get(key)
获取缓存,key为字符串类型,返回值为Object类型。
Object name = redisTemplate.opsForValue().get("name");
#### delete(key)
删除缓存,key为字符串类型。
redisTemplate.delete("name");
#### exists(key)
判断缓存是否存在,key为字符串类型,返回值为boolean类型。
boolean hasKey = redisTemplate.hasKey("name");
#### expire(key, timeout, unit)
设置缓存过期时间,key为字符串类型,timeout为过期时间,unit为时间单位。
redisTemplate.expire("name", 60, TimeUnit.SECONDS);
#### incre(key, delta)
对缓存值进行自增操作,key为字符串类型,delta为自增步长,返回值为自增后的值。
redisTemplate.opsForValue().increment("num", 1);
#### decr(key, delta)
对缓存值进行自减操作,key为字符串类型,delta为自减步长,返回值为自减后的值。
redisTemplate.opsForValue().decrement("num", 1);
#### lpush(key, value)
将数据插入List中,key为字符串类型,value为任意类型,返回值为List的长度。
redisTemplate.opsForList().leftPush("books", "Java");
#### rpop(key)
从List中弹出最后一个元素,key为字符串类型,返回值为弹出的元素值。
Object book = redisTemplate.opsForList().rightPop("books");
#### sadd(key, value)
添加元素到Set中,key为字符串类型,value为任意类型,返回值为添加元素的数量。
redisTemplate.opsForSet().add("users", "Tom");
#### srem(key, value)
从Set中删除元素,key为字符串类型,value为任意类型,返回值为删除元素的数量。
redisTemplate.opsForSet().remove("users", "Tom");
#### smembers(key)
获取Set中的所有元素,key为字符串类型,返回值为Set类型。
Set<Object> users = redisTemplate.opsForSet().members("users");
通过以上示例,你已经可以掌握了SpringBoot中使用Redis的正确方法。总结一下:
1. 引入Redis依赖;
2. 配置Redis;
3. 配置RedisTemplate;
4. 使用RedisTemplate操作Redis。
最后贴一下完整的工程源代码:
### 1、pom.xml
<dependencies>
<!-- SpringBoot-web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.5.RELEASE</version>
</dependency>
<!-- SpringBoot-test组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.3.5.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- SpringBoot-redis组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.5.RELEASE</version>
</dependency>
</dependencies>
### 2、application.properties
# Redis服务器地址 spring.redis.host=localhost # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(默认为8) spring.redis.lettuce.pool.max-active=8 # 连接池最大阻塞等待时间(默认为-1,表示没有限制) spring.redis.lettuce.pool.max-wait=-1ms # 连接池最大空闲连接数(默认为8) spring.redis.lettuce.pool.max-idle=8 # 连接池最小空闲连接数(默认为0) spring.redis.lettuce.pool.min-idle=0
### 3、RedisConfig.java
`java
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper
