• 【Java】java | CacheManager | redisCacheManager


    一、说明

            1、查询增加缓存,使用@Cacheable注解

            2、项目中已经用到了ehcache,现在需求是两个都用

    二、备份配置

    1、redisConfig增加代码

    1. @Bean("redisCacheManage")
    2. @Primary
    3. public CacheManager redisCacheManager(RedisConnectionFactory factory) {
    4. Map<String, RedisCacheConfiguration> configurationMap = MapUtil.newHashMap();
    5. RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
    6. .entryTtl(Duration.ofMinutes(60))
    7. .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
    8. .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
    9. .disableCachingNullValues();
    10. return RedisCacheManager.builder(factory)
    11. .initialCacheNames(configurationMap.keySet())
    12. .withInitialCacheConfigurations(configurationMap)
    13. .cacheDefaults(config)
    14. .build();
    15. }
    16. private RedisSerializer<String> keySerializer() {
    17. return new StringRedisSerializer();
    18. }
    19. private RedisSerializer<Object> valueSerializer() {
    20. Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =
    21. new Jackson2JsonRedisSerializer<>(Object.class);
    22. ObjectMapper objectMapper = new ObjectMapper();
    23. objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    24. // 此项必须配置,否则如果序列化的对象里边还有对象,会报如下错误:
    25. // java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX
    26. objectMapper.activateDefaultTyping(
    27. objectMapper.getPolymorphicTypeValidator(),
    28. ObjectMapper.DefaultTyping.NON_FINAL,
    29. JsonTypeInfo.As.PROPERTY);
    30. // 旧版写法:
    31. // objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
    32. jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    33. return jackson2JsonRedisSerializer;
    34. }

    2、直接使用

    1)缓存

    @Cacheable(key ="'method_' + #tenantId + '_' + #bo.toString()", unless = "#result == null", cacheManager = "redisCacheManage", cacheNames = "api")

    说明1:cacheNames其实是个前缀,也可以理解成分组的概念;方便手动删除时,根据前缀删除

    2)示例截图

    3)redis存储结果截图

    ~~

  • 相关阅读:
    JUC_Volatile简述
    如何判断一个js对象是否存在循环引用
    pat_basic_1013 数素数
    使用C语言实现散列表中的冲突处理方法
    【C++】特殊类的设计
    服务器(Linux)查看Tomcat运行日志
    【云原生之Docker实战】使用docker部署nightingale运维监控平台
    window 下 达梦数据库的备份和还原
    编程老手如何在autojs和冰狐智能辅助之间选择?
    猿创征文 |【算法面试入门必刷】动态规划-线性dp(四)
  • 原文地址:https://blog.csdn.net/myloverisxin/article/details/134535509