一、 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
<!-- 1.5的版本默认采用的连接池技术是jedis 2.0以上版本默认连接池是lettuce, 在这里采用jedis,所以需要排除lettuce的jar -->
</dependency>
<!-- 将作为Redis对象序列化器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
二、配置信息
spring:
cache:
# 如果由底层的缓存管理器支持创建,以逗号分隔的列表来缓存名称
cache-names: redisCache
redis:
# 是否允许redis缓存空值
cache-null-values: true
# redis的键前缀
key-prefix: redisCache_
# 缓存过期时间戳,设置为0不设置过期时间
time-to-live: 600000ms
# 是否启用redis的键前缀
use-key-prefix: true
# 缓存类型,在默认的情况下,redis会根据上下文自动探测
type: redis
redis:
# Redis数据库索引(默认为0)
database: 0
# Redis服务器地址
host: 127.0.0.1
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
password: ""
# 连接超时时间(毫秒)
timeout: 1000
jedis:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 8
# 连接池中的最大空闲连接
max-idle: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
# 连接池中的最小空闲连接
min-idle: 0
三、配置类
@Configuration
public class RedisConfiguration {
@Bean
@Primary
public FastJsonRedisSerializer<Object> fastJsonRedisSerializer() {
return new FastJsonRedisSerializer<>(Object.class);
}
@Bean
@Primary
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 开启事务支持(可选)
redisTemplate.setEnableTransactionSupport(true);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
// 设置值的序列化方法
redisTemplate.setValueSerializer(fastJsonRedisSerializer());
// 注册到工厂中
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setHashValueSerializer(fastJsonRedisSerializer());
// 设置默认的序列化方法
redisTemplate.setDefaultSerializer(stringRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
public RedisCacheManager customCacheManager(RedisConnectionFactory redisConnectionFactory) {
//包装成SerializationPair类型
RedisSerializationContext.SerializationPair serializationPair = RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer());
//redis默认配置文件,并且设置过期时间
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofDays(1));
//设置序列化器
redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(serializationPair);
//RedisCacheManager 生成器创建
RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(redisCacheConfiguration);
return builder.build();
}
@Bean
public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForValue();
}
@Bean
public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForHash();
}
@Bean
public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForList();
}
@Bean
public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForSet();
}
@Bean
public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForZSet();
}
}
四、测试代码
@SpringBootTest
public class ValueOperationsTests {
@Resource
ValueOperations<String, Object> valueOperations;
@Test
void operationString() {
valueOperations.set("hello", "world");
}
}
网友评论