spring-boot 整合 Redis 缓存

文档更新说明

  • 2019年04月20日 v1.0 初稿

引入依赖

compile "org.springframework.boot:spring-boot-starter-cache"
compile "org.springframework.boot:spring-boot-starter-data-redis"

添加CacheProperties

@Data
@ConfigurationProperties(prefix = "fengqiangboy.cache")
public class CacheProperties {

    /**
     * 缓存版本号, 会出现在缓存key前面,方便更新的时候让旧缓存失效
     */
    private String version = "0";

    /**
     * 缓存过期时间
     * 单位:秒
     */
    private int expiration = 2 * 60 * 10;

}

配置cacheManager

@Configuration
@EnableCaching
public class RedisCachingConfig extends CachingConfigurerSupport {

    /**
    * 配置缓存版本号,方便在缓存需要失效的时候,直接更新缓存版本号
    */
    
    private final CacheProperties cacheProperties;

    public RedisCachingConfig(CacheProperties cacheProperties) {
        this.cacheProperties = cacheProperties;
    }

    /**
     * 添加缓存默认超时配置
     *
     * @param redisTemplate redis模板
     * @return 缓存管理器
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
        // Spring boot 默认会根据依赖来自动选择缓存,我们可以在这里强制使用redis作为缓存
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        
        // 设置key都使用前缀,否则会导致不同name的缓存使用了相同的key
        // 比如两个缓存都使用了用户ID作为缓存key,默认情况下,redis里面存储缓存的key完全相同,这里使用了前缀的话,就可以往缓存的key上面添加前缀,以区分不同name的缓存(DefaultRedisCachePrefix 默认使用cacheName作为前缀)
        rcm.setUsePrefix(true);
        rcm.setCachePrefix(new DefaultRedisCachePrefix("_" + cacheProperties.getVersion() + ":"));
        
        // 设置缓存过期时间,单位为秒,超时之后,redis自动删除该缓存
        rcm.setDefaultExpiration(cacheProperties.getExpiration());
        return rcm;
    }

}