Skip to content

redis

这里介绍一下 redis 的使用。

功能介绍

主要包含在 wmeimob-spring-boot-starter-redis jar 中。

引入公共依赖:

xml
<dependency>
    <groupId>com.wmeimob.fastboot</groupId>
    <artifactId>wmeimob-spring-boot-starter-redis</artifactId>
</dependency>

支持的功能:

  • redis template 配置自动装配
  • spring cache 功能扩展
  • redis 工具类使用

redis template 配置自动装配

java
/**
 * redis template 自动装配类
 *
 * @author mjyang
 * @date 2023/3/24 14:53
 */
@Configuration
public class RedisTemplateAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        template.setValueSerializer(RedisSerializer.json());
        template.setHashValueSerializer(RedisSerializer.json());
        return template;
    }
}

通过此配置类来确保 redis key,value 使用合适的配置。

spring cache 功能扩展

自定义 cache error handler

避免在使用 spring 缓存注解时, redis 出错时连同业务一起出错,至少还可以执行我们的业务逻辑。

java
@Override
public CacheErrorHandler errorHandler() {
    return new CustomizerCacheErrorHandler();
}

spring cache 注解动态化

当我们在使用 spring cache 注解时,是无法设置过期时间的。例如:

java
@Cacheable(cacheNames = "books")

为此重写了 spring cache createRedisCache 方法,支持两种方式设置过期时间:

java
@Cacheable(cacheNames = "books#1s") 

这里可以使用 1s,1d等时间单位,因为 createRedisCache 重写时,利用了 spring 工具类 DurationStyle.detectAndParse 进行解析

另外也可以基于配置类 CacheProperties 进行配置。

yml
spring:
    cache:
        redis:
           xxx: 1d

redis 工具类使用

参考