【Redis 开发】多级缓存,本地进程缓存Caffeine

多级缓存

多级缓存

Redis处理并发的能力是非常强大的,但是tomcat的支持并发的能力跟不上Redis的性能,导致整体性能的下降

Redis缓存失效时,会对数据库产生冲击,之间再无屏障

为了应对上述问题,我们采用多级缓存,就是在请求处理的每个环节分别添加缓存,减轻tomcat的压力,提升性能

  1. 对于一些静态资源的请求,可以放在浏览器客户端的缓存上
  2. nginx也可以编辑代码进行缓存
  3. 第三步直接由nginx转向Redis缓存进行查询减轻tomcat的压力
  4. 在tomcat服务器上也设置缓存不必访问数据库提高性能

本地进程缓存Caffeine

比如:HashMap,GuavaCache,Caffeine

优点:读取本地内存,没有网络开销,速度更快

缺点:存储容量有限,可靠性较低,无法共享

场景:性能要求较高,缓存数据量较小

我们这里使用Caffeine

Caffeine是一个基于java8开发的,提供了近乎最佳命中率的高性能本地缓存库

地址:https://github.com/ben-manes/caffeine

  • 快速使用Caffeine
java 复制代码
//创建缓存对象
Cache<String,String> cache=Caffeine.newBuilder().build();
//存数据
cache.put(key,value);
//取数据
String gf=cache.getIfPresent(key);//这种形式不是常用的这里如果缓存查不到就返回null
//取数据-常用,这里如果缓存查不到,就使用第二个参数的方法参数取数据库中进行查找
String gf=cache.get(key,key->{
   //执行查询数据库的业务逻辑
   return 返回数据
})

Caffeine三种缓存驱逐策略

  1. 基于容量,设置缓存的数量上限
java 复制代码
Cache<String,String> cache=Caffeine.newBuilder()
                           .maximumSize(1) //设置缓存大小上限
                           .build();
  1. 基于时间,设置缓存的有效时间
java 复制代码
Cache<String,String> cache=Caffeine.newBuilder()            
                            .expireAfterWrite(Duration.ofSeconds(10))//设置缓存大小上限
                            .build();
  1. 基于引用:设置缓存为软引用或弱引用,利用GC来回收缓存数据,性能较差,不建议使用

默认情况下,当一个元素过期的时候,Caffeine不会立即将其清理或删除,而是当再一次读或写操作后,或者在空闲时间完成对失效数据的驱逐

相关推荐
Lyyaoo.1 小时前
Redisson
数据库·缓存
网络工程小王1 小时前
【LCEL 链式调用详解】调用篇-2
java·服务器·前端·数据库·人工智能
道法自然,人法天2 小时前
PostgreSQL安装与初始化教程(二进制压缩包)
数据库·postgresql
yzs872 小时前
从Hydra到storage_engine:PostgreSQL列存引擎的性能跃迁与技术进化
数据库·postgresql
红云梦2 小时前
官方 Anthropic Postgres MCP Server 存在 SQL 注入漏洞 -- SafeDB 是如何做到 4 层防御的
数据库·sql
TDengine (老段)2 小时前
红有软件重构智能油田时序数据底座,支撑生产实时感知与设备预测性维护
大数据·数据库·人工智能·重构·时序数据库·tdengine
倒霉蛋小马3 小时前
【Redis】什么是缓存击穿?
数据库·redis·缓存
Jing_jing_X3 小时前
MCP (一)是什么?一文讲清 AI 如何连接现实世界
数据库·人工智能·oracle
阿凡观察站3 小时前
2026年工程项目管理软件推荐:这5款主流产品值得关注
大数据·数据库·低代码·finebi·简道云
逸Y 仙X4 小时前
文章二十一:ElasticSearch 词项查询与调度查询实战
java·大数据·数据库·elasticsearch·搜索引擎