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

Spring Boot 实用小技巧:多级缓存(Caffeine + Redis)- 第545篇

悟纤文章(文章累计540+)

国内最全的Spring Boot系列之一

国内最全的Spring Boot系列之二

国内最全的Spring Boot系列之三

国内最全的Spring Boot系列之四

国内最全的Spring Boot系列之

国内最全的Spring Boot系列之六

国内最全的Spring Boot系列之

国内最全的Spring Boot系列之

Docker中部署SpringBoot项目,超详细教程 - 第540篇

IDEA:别再用 StringBuilder 拼命了,用 + 吧 - 第541篇

实战派 Spring Boot:7个你一定用得上的技巧  - 第542篇

你以为你会写测试?Spring Boot 还藏了这些招!—让你的Spring Boot 测试不再只是“点个运行” - 第543篇

当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇

学 Spring Boot,就找悟纤

为什么要整多级缓存?

先问大家一个问题:

如果你有个土豪朋友(Redis),存了海量的数据,但是每次找他借钱(查缓存),都要打车去他家(网络 IO)——你受得了吗?

所以,聪明的办法是:你自己家(Caffeine 本地内存)也藏点私房钱(热点数据)

这样想买奶茶就不用总跑去找土豪了。

👉本地(Caffeine) = 速度快

👉分布式(Redis) = 数据全

二者合体 =天下无敌,缓存双保险

实现步骤

1. 养一只本地仓鼠(Caffeine)

仓鼠的特点就是:存点东西在嘴里,随取随用,但存不下太多。

    @Beanpublic Cache<String, Object> caffeineCache() {    return Caffeine.newBuilder()            .expireAfterWrite(5, TimeUnit.MINUTES) // 5分钟后,仓鼠忘记藏在哪了            .maximumSize(10000)                    // 最多存10000个花生            .build();}

    2. 搞个远房土豪亲戚(Redis)

    Redis 就是“远方的超级仓库”,虽然东西多,但去一趟要点时间。

    Spring Boot 已经给你封装好了 StringRedisTemplate,直接用就行。

    3. 联合经营(Caffeine + Redis)

    写个多级缓存 Service,就像开个“夫妻店”:

      public Object get(String key, Supplier<Object> dbLoader) {    // 1. 先问仓鼠    Object value = caffeineCache.getIfPresent(key);    if (value != null) return value;    // 2. 再问远房土豪    value = redisTemplate.opsForValue().get(key);    if (value != null) {        caffeineCache.put(key, value); // 顺手喂一口仓鼠        return value;    }    // 3. 最后没办法,只能自己干(查数据库)    value = dbLoader.get();    if (value != null) {        redisTemplate.opsForValue().set(key, value.toString(), 10, TimeUnit.MINUTES);        caffeineCache.put(key, value);    }    return value;}

      这样一来:

      l 热点数据:直接仓鼠嘴里掏,快到飞起

      l 冷门数据:去远房土豪家拿,再顺便塞给仓鼠,下次更快。

      l实在没有:自己种地(查数据库)。

      4.更新数据的时候

      仓鼠和土豪的记忆力都很差,你得提醒他们 “忘掉旧的”:

        public void updateUser(User user) {    userRepository.save(user); // 更新数据库    cacheService.evict("user:" + user.getId()); // 叫仓鼠和土豪都忘了}

        如果是分布式多节点,还可以让土豪(Redis)用 广播功能,大声喊一句:

        l 兄弟们!旧数据别留了!”

        l所有仓鼠就会集体清空对应缓存,保持一致。

        使用效果

        l 99%热门数据 → 仓鼠秒取

        l 剩下的 1% → 远房土豪 Redis 出手

        l数据全局一致,还省了一大堆 Redis QPS

        注意事项

        l 仓鼠(Caffeine)记性不好,要设好过期时间和数量,不然会撑爆内存。

        l 土豪(Redis)偶尔会忘记,可以加随机过期时间,避免集体“失忆雪崩”。

        l更新时别想着“改缓存”,直接删掉就好,避免脏数据。

        总结

        多级缓存就像:

        l 仓鼠负责速度,

        l 土豪负责存量,

        l 数据库是兜底。

        这仨一组合,你的接口就能像点奶茶一样丝滑:

        “Caffeine 秒回 → Redis 接力 → DB 补刀”。

        如果你觉得这篇文章有用,欢迎点赞、分享、转发、投喂瓜子🌰

        学Spring Boot,就找悟纤! 咱们下期见!

        图片

        历史文章(文章累计530+)

        国内最全的Spring Boot系列之一

        国内最全的Spring Boot系列之二

        国内最全的Spring Boot系列之三

        国内最全的Spring Boot系列之四

        国内最全的Spring Boot系列之

        国内最全的Spring Boot系列之六

        国内最全的Spring Boot系列之

        国内最全的Spring Boot系列之

        Spring Boot实用小技巧11 - 第533篇

        Viggle Api上线V3-beta模型,圣诞节跳舞视频来临

        Suno Api V4 - Suno Api系列教程,耗费1个星期,输出14篇文章

        Viggle AI开放照片唱歌API,新年快乐唱起来

        Docker入门篇[SpringBoot之Docker实战系列] - 第534篇

        Docker 的安装和基本使用[SpringBoot之Docker实战系列] - 第535篇

        国内最全的Spring Boot系列之八 —— 汇聚8年500多篇文章,值得收藏

        Docker 基本概念[SpringBoot之Docker实战系列] - 第536篇

        Docker 使用镜像[SpringBoot之Docker实战系列] - 第537篇

        Docker 操作容器[SpringBoot之Docker实战系列] - 第538篇

        Docker 仓库/私有仓库[SpringBoot之Docker实战系列] -  第539篇

        Docker中部署SpringBoot项目,超详细教程 - 第540篇

        IDEA:别再用 StringBuilder 拼命了,用 + 吧 - 第541篇

        实战派 Spring Boot:7个你一定用得上的技巧  - 第542篇

        你以为你会写测试?Spring Boot 还藏了这些招!—让你的Spring Boot 测试不再只是“点个运行” - 第543篇

        当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇

        http://www.dtcms.com/a/337725.html

        相关文章:

      • 如何解决机器翻译的“幻觉“问题(Hallucination)?
      • 当AI学会“思考”:大语言模型背后的智能本质与伦理边界
      • 【提示词技巧】通用提示词原则介绍
      • Linux学习-软件编程(进程间通信1)
      • ROS 2 中用于建图的一些 topic
      • PyTorch神经网络工具箱(优化器)
      • buuctf:护网杯_2018_gettingstart、oneshot_tjctf_2016
      • llamafactory使用qlora训练
      • VectorDB+FastGPT一站式构建:智能知识库与企业级对话系统实战
      • 使用LLaMA-Factory对大模型进行微调-详解
      • OSG+Qt —— 笔记2- Qt窗口绘制棋盘及模型周期运动(附源码)
      • linux:告别SSH断线烦恼,Screen命令核心使用指南
      • 第四章:大模型(LLM)】07.Prompt工程-(1)Prompt 原理与基本结构
      • 大数据分析-读取文本文件内容进行词云图展示
      • Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法
      • [机器学习]09-基于四种近邻算法的鸢尾花数据集分类
      • 具身智能赋能轮椅机器人的认知革命与人机共生新范式
      • 【软考架构】第4章 信息安全的抗攻击技术
      • 从「行走」到「思考」:机器人进化之路与感知—决策链路的工程化实践
      • 微电网管控系统中python多线程缓存与SQLite多数据库文件连接池实践总结(含源码)
      • 安川YASKAWA焊接机器人保护气智能节气阀
      • 蓝牙 GFSK RX Core 架构解析
      • Linux下的软件编程——IPC机制
      • 重复(Repeat)和迭代(Iteration)区别、递归(Recursion)
      • 超级云平台:重构数字生态的“超级连接器“
      • 想找出版社出书?这样选就对了!
      • 哈工深无人机目标导航新基准!UAV-ON:开放世界空中智能体目标导向导航基准测试
      • 【论文阅读】-《GeoDA: a geometric framework for black-box adversarial attacks》
      • 基于Flink CDC实现联系人与标签数据实时同步至ES的实践
      • 后台管理系统-6-vue3之mockjs模拟和axios请求数据