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

news2024/11/24 13:44:20

多级缓存

  • 多级缓存
  • 本地进程缓存Caffeine
    • 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
//创建缓存对象
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. 基于容量,设置缓存的数量上限
Cache<String,String> cache=Caffeine.newBuilder()
                           .maximumSize(1) //设置缓存大小上限
                           .build();
  1. 基于时间,设置缓存的有效时间
Cache<String,String> cache=Caffeine.newBuilder()            
                            .expireAfterWrite(Duration.ofSeconds(10))//设置缓存大小上限
                            .build();
  1. 基于引用:设置缓存为软引用或弱引用,利用GC来回收缓存数据,性能较差,不建议使用

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1632892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0425DormAJAX项目

0425DormAJAX项目包-CSDN博客 数据库字段 添加界面&#xff1a; 初始状态&#xff1a; 点击性别&#xff0c;宿舍号使用ajax动态添加&#xff1a; 学生主界面&#xff1a; 实现分页查询&#xff1a; 点击修改学生宿舍&#xff0c;查看换寝记录&#xff0c;ajax动态显示列表&…

如何在WordPress中设置网站的SEO标题和描述

在WordPress中&#xff0c;想要让你的网站在搜索引擎结果中脱颖而出&#xff0c;设置优秀的SEO标题和描述至关重要。这不仅可以帮助搜索引擎更好地理解你的网站内容&#xff0c;还可以吸引更多的点击率和流量。而选择一款合适的SEO插件是实现这一目标的关键之一。让我们来看看两…

速成AWD并获奖的学习方法和思考记录

前言 这是一个市赛。之前没有怎么打过AWD&#xff0c;所以进入决赛后只有三天的准备时间&#xff0c;期间我不停的请教大佬&#xff0c;阅读各类文章&#xff0c;受益颇深&#xff0c;做此纪录&#xff0c;奉献给掌控的各位同学学习。 在AWD中本是三人一队&#xff0c;可惜我…

Babel 原理浅析

Babel 原理浅析 Babel 是什么Babel 的作用及常用场景Babel 执行过程原理Babel的基本原理解析过程插件系统 Babel 是什么 官方解释&#xff1a;Babel 是一个 JavaScript 编译器&#xff0c;也是一个工具链&#xff0c;主要用于将 ECMAScript 2015 代码转换为当前和旧版浏览器或环…

一篇文章 学会Qt 样式表(qss)

QML 中风格和主题的设计可以通过配置文件选择现有几种中的一种&#xff0c;或者直接在控件定义时&#xff0c;指定其属性&#xff0c;如背景颜色或者字体大小。在QWidget框架中&#xff0c;则通过了一种叫做qss样式表的东西来进行描述&#xff0c;跟CSS逻辑上类似。 这个qss抽…

ThreeJs模拟工厂生产过程八

这节算是给这个车间场景收个尾&#xff0c;等了几天并没有人发设备模型给我&#xff0c;只能自己找了一个凑合用了。加载模型之前&#xff0c;首先要把货架上的料箱合并&#xff0c;以防加载模型之后因模型数量多出现卡顿&#xff0c;方法和之前介绍的合并传送带方法相同&#…

【C++初阶】string

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

echarts tooltip 内容太多,超出范围显示不全问题,亲测有效

参考文章&#xff1a;echarts tooltip显示不全问题 在项目里面的tooltip数据特别多&#xff0c;显示不全问题&#xff08;有下面几种方法&#xff0c;选择最适合自己的&#xff09;&#xff1a; 1、如果盒子还够大&#xff0c;只是tooltip飘到上面或者下面被覆盖住了&#xff…

一文解读 SQL 生成工具

SQL 生成工具可用于测试 Parser 与其他数据库产品的兼容性&#xff0c;通过解析 YACC 语法文件中的产生式&#xff0c;生成对应的 SQL 语句&#xff0c;再使用数据库执行该 SQL&#xff0c;根据结果判断语句是否与其他数据库语法兼容。 01工具使用 语法文件预处理 预处理目的…

13 Linux实操篇-网络配置

第十三章 Linux实操篇-网路配置 13.1 Linux 网络配置原理图 13.2 查看网络IP 和网关 子网ip 与网关 13.3 查看Windows 中 VMnet8 和 Linux 的网络配置 查看Windows 中 VMnet8&#xff1a;ipconfig Linux 的网络配置: ifconfig 13.4 ping 测试主机之间网络连通性 基本语法&a…

教育装备展火热开幕,锐捷网络用科技力量点亮教育未来之光

了解教育装备行业发展新趋势、感受教育装备领域创新脉动。4月19日,一场汇聚智慧与创新的教育行业盛会——第 83 届中国教育装备展示会在山城重庆隆重启幕。位于N4013号的锐捷网络展位不仅汇聚了极简以太全光3.X、三擎云桌面2.X、极简教育城域网等前沿科技方案,更通过样机展示、…

ssl证书是怎么实现数据加密传输的?原理是什么?

SSL证书实现数据加密传输的过程大致可以分为以下几个步骤&#xff1a; 1. 握手阶段&#xff1a; - 客户端请求连接&#xff1a;当用户尝试访问一个HTTPS网站时&#xff0c;浏览器&#xff08;客户端&#xff09;会向服务器发起一个HTTPS请求&#xff0c;请求建立一个安全连接。…

通过iMock学习Jvmsandbox

Jvm-sandbox Jvm-sandbox基于Jvm-sandbox的Mock平台iMockiMock的工程学习iMock怎么写的&#xff08;sandbox的module应该怎么写&#xff09; Jvm-sandbox Jvm-sandbox是阿里开源的一款java的沙箱&#xff0c;看网上的介绍在沙箱里你可以做你能想到的奇妙的事情。 基于Jvm-san…

图题目:可以到达所有点的最少点数目

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;可以到达所有点的最少点数目 出处&#xff1a;1557. 可以到达所有点的最少点数目 难度 4 级 题目描述 要求 给定一个有向无环图&#xff0c;包含编…

Web3与智能合约:科技革新下的新金融时代

在当今数字化时代&#xff0c;Web3和智能合约正在共同塑造着金融领域的未来。Web3作为下一代互联网的重要组成部分&#xff0c;以其去中心化、安全性和透明性为核心特点&#xff0c;正推动着金融行业向着数字化和去中心化的方向发展。而智能合约作为Web3技术的关键应用之一&…

如何将本地项目上传到Github(SSH方式)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

OSPF基本配置

原理概述 OSPF 是一种应用非常广泛的基于链路状态的动态路由协议&#xff0c;它具有区域&#xff08; Area )化的层次结构&#xff0c;扩展性好&#xff0c;收敛速度快&#xff0c;适合部署在各种规模的网络上。 在 OSPF 中&#xff0c;每台路由器都必须有一个 Router-I…

在线商城客服系统,多用户电商系统可API对接客服软件

在当今数字化时代&#xff0c;在线商城客服系统和多用户电商系统之间的无缝API对接已成为电商行业的重要趋势。这种整合为商家提供了更高效的客户服务和管理方式&#xff0c;提升了用户体验和业务效率。其中&#xff0c;商淘云电商客服系统作为一款强大的客服管理工具&#xff…

Java Swing游戏开发学习26

内容来自RyiSnow视频讲解 这一节讲的是Inventory背包&#xff0c;类似RPG游戏中人物角色放置装备、药品、武器、宝石等物品的一个若干行若干列的表格窗口。 可以显示装备物品&#xff0c;并选择它们。 前言 作者说这一节可能是第二部分里面爬起来最高的山峰。 效果 最后还有…

Unity3d 学习之按钮绑定事件

创建测试脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class myTest : MonoBehaviour {// Start is called before the first frame updatepublic Button _codeBindBtn null;void Start(){if (_codeBi…