当前位置: 首页 > news >正文

【Java】java | CacheManager | redisCacheManager

一、说明

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

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

二、备份配置

1、redisConfig增加代码

@Bean("redisCacheManage")
    @Primary
    public CacheManager redisCacheManager(RedisConnectionFactory factory) {
        Map<String, RedisCacheConfiguration> configurationMap = MapUtil.newHashMap();
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(60))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
                .disableCachingNullValues();
        return RedisCacheManager.builder(factory)
                .initialCacheNames(configurationMap.keySet())
                .withInitialCacheConfigurations(configurationMap)
                .cacheDefaults(config)
                .build();
    }

    private RedisSerializer<String> keySerializer() {
        return new StringRedisSerializer();
    }

    private RedisSerializer<Object> valueSerializer() {
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =
                new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

        // 此项必须配置,否则如果序列化的对象里边还有对象,会报如下错误:
        //     java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX
        objectMapper.activateDefaultTyping(
                objectMapper.getPolymorphicTypeValidator(),
                ObjectMapper.DefaultTyping.NON_FINAL,
                JsonTypeInfo.As.PROPERTY);
        // 旧版写法:
        // objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        return jackson2JsonRedisSerializer;
    }

2、直接使用

1)缓存

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

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

2)示例截图

3)redis存储结果截图

~~

相关文章:

  • 机器学习技术栈—— 概率学基础
  • spring注解
  • CSDN流量卷领取和使用保姆级教程——流量卷,恭喜获得每日任务奖励【1500曝光】可获得新增曝光,阅读转化,点赞转化,新增关注-流量卷,流量卷,流量卷
  • 19.删除链表的倒数第 N 个节点
  • 听GPT 讲Rust源代码--src/librustdoc(2)
  • Python Turtle Graphics 绘制I Love You字符
  • easyExcel实现分批导入,动态表头分批导出,以及导出表格样式设置
  • python趣味编程-5分钟实现一个石头剪刀布游戏(含源码、步骤讲解)
  • 【FLink】水位线(Watermark)
  • 使用wxPython和PyMuPDF合并PDF文档并自动复制到剪贴板
  • Stable Diffusion XL网络结构-超详细原创
  • 【C++进阶之路】第十篇:C++的类型转换
  • 环境配置|GitHub——如何在github上搭建自己写的网站
  • ClickHouse查看执行计划
  • Caché for UNIX®, Linux及macOS的安装及配置
  • mysql 设置远程登录
  • 力扣-414.第三大的数(两种解法)
  • Linux难学?大神告诉你,Linux到底该怎么自学!
  • golang opt-in transparent telemetry
  • 1.什么是Angular?
  • 大外交|巴西总统卢拉第六次访华签署20项协议,“双方都视对方为机遇”
  • 专访|导演刘江:给谍战题材注入现实主义的魂
  • 睡觉总做梦是睡眠质量差?梦到这些事,才要小心
  • “不为一时一事所惑,不为风高浪急所扰”——习近平主席对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典纪实
  • 深入贯彻中央八项规定精神学习教育中央指导组完成进驻
  • 外交部:愿同拉美国家共同维护多边贸易体制