ehcache 手动刷新缓存_缓存的那些事

本文探讨了何时需要使用缓存,选择了本地缓存(如Ehcache, Guava Cache, Caffeine)与分布式缓存(如MemCache, Redis, Tair)的考量因素。讲解了多级缓存的重要性,尤其是Caffeine作为一级缓存和Redis作为二级缓存的搭配使用。此外,文章详细介绍了缓存更新的三种模式:Cache Aside Pattern, Write Through Pattern, Write Behind Caching Pattern,并讨论了缓存的常见问题——缓存穿透、缓存并发和缓存雪崩,以及相应的解决方案。" 131488503,19338123,嵌入式Linux:x210根文件系统制作与NFS启动详解,"['Linux', '嵌入式', '运维', '文件系统', '网络服务']
摘要由CSDN通过智能技术生成

d9b3bf61fc799c35523197521562c468.png

​作者 | 黄永灿

后端开发攻城狮,关注服务端技术与性能优化。

什么时候需要缓存

一般来说会从两个方面来判断是否需要缓存:

  1. CPU 占用:如果某些应用需要消耗大量的 CPU 资源去计算,例如你使用正则表达式比较频繁或者业务查询链很复杂时,而它又占用了很多 CPU 的话,那就应该使用缓存将结果缓存下来。
  2. 数据库 IO 占用:如果你发现你的数据库连接池比较空闲,可以不用缓存。但是如果数据库连接池比较繁忙,甚至经常报出连接不够的报警,那么是时候应该考虑缓存了。

如何选择合适缓存

缓存主要分为本地缓存和分布式缓存。本地缓存的优点在于没有网络延迟查询速度快,缺点是在集群环境下容易出现数据不一致的情况,以及缓存过大时容易触发 GC,分布式缓存的优点在于数据一致性得到了保证,并且独立于应用程序,扩展维护方便。

本地缓存

首先来对比一下几个常用的本地缓存,具体原理可以参考你应该知道的缓存进化史:

39e5818e7ed9dce8eac627945460263f.png
  • ConcurrentHashMap 比较适合缓存比较固定不变的元素,且缓存的数量较小的。虽然从上面表格中比起来有点逊色,但是由于它是 JDK 自带的类,在各种框架中依然有大量的使用。比如我们可以用来缓存反射的 Method,Field 等等。
  • LRUMap 相对于 ConcurrentHashMap 引入了淘汰算法,如果不想引入第三方包,又想使用淘汰算法淘汰数据,可以使用这个。
  • 对于 Ehcache 来说,由于其 jar 包很大,较重量级。对于需要持久化和集群的一些功能的,可以选择 Ehcache,但一般都会用分布式缓存来替代它。
  • 对于 Guava Cache 来说,Guava 这个 jar 包在很多 Java 应用程序中都有大量的引入。 所以很多时候直接用就好了,并且它本身是轻量级的而且功能较为丰富,在不了解 Caffeine 的情况下可以选择 Guava Cache。
  • 对于 Caffeine 来说,很多人把它形容为未来的缓存,它在命中率,读写性能上都比 Guava Cache 好很多。 并且它的 API 和 Guava Cache 基本一致,甚至会多一点。以下是 Caffeine 和其他缓存的读写性能对比。

e1871496ec00209f735d0f9b0415f50a.png
总结一下:如果不需要淘汰算法则选择 ConcurrentHashMapÿ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值