SpringBoot +Redis 自定義模板

Redis序列化對象
GenericToStringSerializer: 可以將任何對象泛化為字符串并序列化。
JacksonJsonRedisSerializer: 序列化object對象為json字符串。
Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer實際上是一樣的。
JdkSerializationRedisSerializer: 序列化java對象,對象必須實現Serializable接口。
StringRedisSerializer: 簡單的字符串序列化。

Redis配置:

@Configuration
@EnableCaching
public class RedisConfigurer extends CachingConfigurerSupport {

    /*定義緩存數據 key 生成策略的bean
    包名+類名+方法名+所有參數
    */
    @Bean
    public KeyGenerator wiselyKeyGenerator(){
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : params) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };

    }

    @Bean
    public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate<?, ?> redisTemplate) {
        // 創建緩存管理器
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        cacheManager.setDefaultExpiration(3600 * 24);
        cacheManager.setUsePrefix(true);
        cacheManager.setCachePrefix(new DefaultRedisCachePrefix(":"));
        return cacheManager;
    }

    @Bean
    public RedisTemplate redisTemplate(JedisConnectionFactory factory) {
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        RedisTemplate template = new RedisTemplate();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }

    @Bean
    public RedisTemplate sessionRedisTemplate(JedisConnectionFactory factory) {
        RedisTemplate<Serializable, Session> template = new RedisTemplate();
        template.setConnectionFactory(factory);
        template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new JdkSerializationRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}

使用模板

@Resource
private StringRedisTemplate stringRedisTemplate;
......
@Resource(name = "redisTemplate")
private HashOperations<String, Integer, Serializable> hashOperations;
......
@Resource(name = "sessionRedisTemplate")
private ValueOperations<Serializable, Session> valueOperations;

Spring 緩存注解*@Cacheable的使用

@Cacheable(value = "domainHome", keyGenerator = "wiselyKeyGenerator", unless = "#result.empty")
public List<AuthorityUsers> getDomains(String serverName) {
    ......
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,953評論 6 342
  • 人生總是百轉千回,在一段特殊的旅程中,轉角遇到愛。 感謝上帝奇妙的預備!因為在微信群里,發現一條有關腫...
    靜如初夏閱讀 319評論 0 2
  • 七絕·幽蘭 群芳空谷傲幽蘭, 沐雨凌風戰雪酣。 不羨花開殷富地, 蜂蝶自會戀香還。
    任爾風云我自逍閱讀 659評論 0 3