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阅读 135,676评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,096评论 6 342
  • 人生总是百转千回,在一段特殊的旅程中,转角遇到爱。 感谢上帝奇妙的预备!因为在微信群里,发现一条有关肿...
    静如初夏阅读 2,490评论 0 2
  • 七绝·幽兰 群芳空谷傲幽兰, 沐雨凌风战雪酣。 不羡花开殷富地, 蜂蝶自会恋香还。
    任尔风云我自逍阅读 3,826评论 0 3