图片查询优化之多级缓存-caffeine-Redis
记录自己在学习项目过程中的问题和发散的知识点,形成笔记
- 做图片优化的时候,想到的一些问题;
- 思路:缓存->Redis->caffeine->两者区别->多级缓存—>为什么caffeine比Redis还快?->Redis 为什么能承接跨应用节点的缓存请求?
缓存?目的提高系统的响应速度,减小数据库的压力,提高图片查询的速度。
构建多级缓存:caffeine+Redis+MySQL
-
caffeine本地缓存是什么,他的实际存储位置在哪里?
- 本地缓存,简单来说,caffeine 基于物理内存,在你程序运行的进程中的 jvm 的堆里面,可以理解为一个对象,这是他实际存储的位置
-
Redis 为什么这么快,他的存储又在哪里?
- 一样基于内存,远程服务器的物理内存;本地服务器的物理内存
-
caffeine 本地缓存和 Redis 的区别?
- caffeine 节点数据不共享,Redis 可以承接跨应用节点的缓存请求,同时解决 Caffeine 本地缓存 “节点间数据不共享” 的问题。
- caffeine,进程被销毁,缓存的数据就会消失;但是 redis 不会,他有持久化存储
- caffeine 的访问速度更快
-
为什么 caffeine 本地缓存比 Redis 还要快?
- caffeine 类似于 ThreadLocal 的本地内存,读取直接拿就行
- Redis,如果在远程,就会有网络开销;其次即使在本地,他也是在单独的进程中,有进程开销;
- 数据访问层级更浅:Caffeine 的缓存数据直接位于应用进程的 JVM 内存中,访问时仅需经过 “应用进程→JVM 内存” 的层级;而 Redis 的访问路径是 “应用进程→网络协议栈→Redis 服务器进程→Redis 内存”,层级更多,每个层级都会产生微小的耗时,累积后导致 Redis 的延迟高于 Caffeine。
简单来说,caffeine 基于物理内存,在你程序运行的进程中的 jvm 的堆里面,可以理解为一个对象,这是他实际存储的位置
▼text复制代码* 对的,JVM 堆(以及其中的 Caffeine 缓存数据)确实存储在你计算机的物理内存(RAM)中。 * 更准确地说,它是你计算机物理内存中,被分配给运行 Java 应用程序的那个 JVM 进程 的一部分。当 Java 程序启动时,操作系统会为其分配一块内存空间,JVM 会将其中一部分划分为“堆”区域来使用。 * 本地缓存需要自己创建初始化缓存结构(可以简单理解为要自己 new 一个 HashMap)
5.多级缓存的优点: 多级缓存是指结合本地缓存和分布式缓存的优点,在同一业务场景下构建两级缓存系统,这样可以兼顾本地缓存的高性能、以及分布式缓存的数据一致性和可靠性。
- 多级缓存:
- 本地缓存的高性能、
- 分布式缓存,保证缓存一致性,
- 缓存数据的可靠性
6.多级缓存,Redis 承接跨应用节点的缓存请求?
-
redis 全共享缓存,保证分布式场景下的的缓存一致性
-
无论应用节点有多少个,最终,当 caffeine 本地缓存,没有数据时,所有的请求都会访问到 redis,从而保证缓存一致性;
在 “Caffeine+Redis+MySQL” 的多级缓存架构中,Redis 的核心角色是 “分布式共享缓存”,其承接跨应用节点缓存请求的本质,是打破本地缓存的节点壁垒,提供全局共享的缓存服务,最终实现三个关键目标:
- 提升整体缓存命中率:避免同一数据因节点隔离导致的重复查询;
- 有效减轻数据库压力:拦截跨节点的重复请求,减少数据库访问次数;
- 保证分布式缓存一致性:为所有节点提供统一的缓存更新与读取入口,避免数据不一致。
若没有 Redis 承接跨节点缓存请求,仅依赖 Caffeine 本地缓存,在应用分布式部署的场景下,缓存的优化效果会大幅折扣,甚至可能因 “多节点重复访问数据库” 导致系统性能瓶颈。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
