【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不会立即将其清理或删除,而是当再一次读或写操作后,或者在空闲时间完成对失效数据的驱逐

相关推荐
weixin_44612246几秒前
JAVA内存区域划分
java·开发语言·redis
火龙谷27 分钟前
【nosql】有哪些非关系型数据库?
数据库·nosql
TT哇29 分钟前
JavaEE==网站开发
java·redis·java-ee
焱焱枫1 小时前
Oracle获取执行计划之10046 技术详解
数据库·oracle
qq_392397123 小时前
Redis常用操作
数据库·redis·wpf
一只叫煤球的猫4 小时前
真实事故复盘:Redis分布式锁居然失效了?公司十年老程序员踩的坑
java·redis·后端
一只fish4 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(17)
数据库·mysql
花好月圆春祺夏安5 小时前
基于odoo17的设计模式详解---装饰模式
数据库·python·设计模式
A__tao5 小时前
SQL 转 Java 实体类工具
java·数据库·sql
m0_653031365 小时前
腾讯云认证考试报名 - TDSQL数据库交付运维专家(TCCE PostgreSQL版)
运维·数据库·腾讯云