springboot整合redis2.x,使用spring註解進行快取

十三發表於2018-07-04

前言

最近學習spring+redis來快取資料,看得一些書籍和教程都是spring-data-redis1.x的版本,其中一些方法已經過時了,所以我整理了一下簡單的2.x的配置。
專案地址:https://github.com/ksyzz/spri…

專案依賴

專案使用的是maven管理依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>1.5.3.RELEASE</version>
</dependency>

匯入spring-data-redis和redis.client的包。

配置類

建立一個配置類RedisConfig,為該類新增@Configuration和@EnableCaching(啟用快取)的註解。
如果想在spring的註解@Cacheaable使用redis快取,關鍵在於自定義CacheManager的bean。
程式碼如下:

@Configuration
@EnableCaching
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;

    /**
     * 如果只使用註解則不需要配置該bean
     * @param jedisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate initRedisTemplate(@Qualifier("connectionFactory") JedisConnectionFactory jedisConnectionFactory) {

        RedisSerializer str = new StringRedisSerializer();
        RedisSerializer json = new GenericJackson2JsonRedisSerializer();
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(jedisConnectionFactory);
        redisTemplate.setKeySerializer(str);
        redisTemplate.setValueSerializer(json);
        redisTemplate.setHashKeySerializer(str);
        redisTemplate.setHashValueSerializer(json);
        return redisTemplate;
    }

    @Bean(name = "connectionFactory")
    public JedisConnectionFactory initConnect(){
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(host, port);
        JedisConnectionFactory connectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);
        connectionFactory.afterPropertiesSet();
        return connectionFactory;
    }

    @Bean
    public CacheManager init(@Qualifier("connectionFactory") JedisConnectionFactory jedisConnectionFactory){
        // redis2.x以後,cacheManager 不再需要RedisTemplate來建立了
        RedisCacheManager cacheManager = RedisCacheManager.builder(jedisConnectionFactory)
                .build();
        cacheManager.initializeCaches();
        return cacheManager;
    }
}

其他注意事項

需要儲存到redis的物件必須implements Serializable。

相關文章