惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
Y
Y Combinator Blog
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog
G
Google Developers Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MyScale Blog
MyScale Blog
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
P
Proofpoint News Feed
Jina AI
Jina AI
B
Blog RSS Feed
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
D
Docker

See you soon

哟,好久不见,无线打印 | See you soon 试试将文章版本化管理吧 | See you soon 使用 Quadlet 将 Podman 中的 Postgres 当作 systemd 服务运行 | See you soon 大他者,那个无时无刻都在盯着你的东西 | See you soon Laws of Software Engineering,软件工程定律 | See you soon 浅记多因素身份认证 | See you soon Linux 内核中的度量单位 | See you soon 重置 GPG 智能密钥 | See you soon 向 NAS 引入 samba | See you soon 无法重复键入的 Fcitx5 | See you soon ZFS 降级事故 | See you soon 记被 XanMod Kernel 和 AppArmor 联合坑的一次踩坑 | See you soon agent 的 skill 与 toolcall | See you soon 记一次服务器被挂恶意挖矿二进制 | See you soon 活着的 Arc | See you soon 令 acme.sh 使用 Cloudflare 的 DNS API 签发与续签证书 | See you soon 于 Tokio 中卸载 CPU Bound 任务 | See you soon 如我所见,梦破碎的时候 | See you soon 74LS 家族手册 | See you soon JDK Projects 备忘录 | See you soon 关于历史 | See you soon 用 curl 下载 OnePlus 的 ROM | See you soon 实用命令切片 | See you soon 再见,Oh My Zsh。 | See you soon 你不应该复用 strings.Builder | See you soon 博客的明日 | See you soon 被 AppArmor 击杀的 Dockge | See you soon AI 时代的自我 | See you soon 支持删除的布隆过滤器 | See you soon 基于栈的虚拟机与基于寄存器的虚拟机 | See you soon
Guava:Cache | See you soon
Krysztal Huang · 2023-10-18 · via See you soon

在开车的时候,与前方车辆一定要保持适当的距离,不管车速如何都是如此。这段距离叫做缓冲距离;在开发中也有类似的概念,不过分为 BufferCacheCache 偏向无序,Buffer 偏向有序。

为什么要用 Cache?用 HashMap 不是更好?

听着,我知道你很喜欢用 HashMap 也很喜欢自己造轮子。但是你要知道,你自己造的轮子大概率功能比不过 Guava 这种久经风霜的库,即使 Guava 非常的重并且非常的庞大。

为什么用 Guava 的 Cache?单纯就是方便。Guava 的 Cache 提供了以下非常吸引人的方面特性。

  • 从命令行式参数构建
  • 过期时行为
  • 多种驱逐方式

即使 Guava 的 Cache 实现非常的简单,我们也没有必要去和 Guava 这种经历了长期考验的库看谁做的好。节约时间很重要。

构建你的 Cache 视图

对于是否可以安全的在多个线程之间共享一个 Cache,答案是可以:Cache 最核心的实现其实是 ConcurrentHashMap,因此是线程安全的。

选择驱逐模式 (Eviction)

Guava 的 Cache 提供了三种驱逐模式,适用于不同的场合。当然到底该用什么驱逐模式应该由开发者自己决定。

请查阅给出的链接选择适合你的模式。对于一般项目来讲,最合适的是基于时间的驱逐模式以及基于大小的驱逐模式,基于引用的驱逐模式很少用,这种需要借助 GC 进行缓存驱逐的驱逐策略难判断什么时候会缓存穿透。

缓存权重

TODO

驱逐时的监听器

假设一个情景,你的缓存是一种面向反复查询数据库的缓存,你的缓存能暂时保存数据,并且在过期时写入缓存内的数据到数据库里。

这个时候,你就需要设计驱逐时的监听器了——驱逐时把缓存里的东西写到数据库里。

其他建议

考虑到缓存有可能是需要异步的,但是 Guava 没有提供这种操作。所以 Guava 建议使用 Caffeine 这个项目。

不用担心,Guava CacheCaffeine 项目的使用方法几乎一模一样。