• 【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存储结果截图

    ~~

  • 相关阅读:
    java项目-第89期基于ssm的药店信息管理系统
    【华为OD机试python】数字反转打印【2023 B卷|100分】
    给你一颗“定心丸”——记一次由线上事故引发的Log4j2日志异步打印优化分析
    车载ECU嵌入式设备的诊断测试 – DTC
    OLED显示图片
    String的字符串拼接
    C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtest&gmock)
    设计模式---抽象工厂模式
    karmada介绍和分析
    LocalDateTime与时间戳
  • 原文地址:https://blog.csdn.net/myloverisxin/article/details/134535509