【开发篇】十三、J2cache缓存框架

文章目录

  • 1、介绍
  • 2、二级缓存下数据的读取与更新
  • 3、整合
  • 4、使用举例
  • 5、配置的相关说明
  • 6、小结

请添加图片描述

1、介绍

J2cache是一个缓存整合框架,可以提供缓存的整合方案,使各种缓存搭配使用,自身不提供缓存功能

  • J2cache是一个两次缓存的框架

  • 第一级缓存L1使用内存,同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine,默认一级为Caffeine

  • 第二级缓存L2使用 Redis(推荐)/Memcached,默认二级为Redis

  • 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数

J2Cache 从 1.3.0 版本开始支持 JGroups 和 Redis Pub/Sub 两种方式进行缓存事件的通知。在某些云平台上可能无法使用 JGroups 组播方式,可以采用 Redis 发布订阅的方式。详情请看 j2cache.properties 配置文件的说明。

2、二级缓存下数据的读取与更新

读取顺序:

  • L1 => L2 => DataBase

更新顺序:

  • 从数据库中读取最新数据,依次更新 L1 -> L2
  • 发送广播清除某个缓存信息
  • 接收到广播(手工清除缓存 & 一级缓存自动失效)
  • 从 L1 中清除指定的缓存信息

3、整合

以ehcache + redis为一二级缓存,进行整合。首先加入J2cache起步依赖坐标和核心依赖包:

<!--起步依赖-->
<dependency>    <groupId>net.oschina.j2cache</groupId>    <artifactId>j2cache-spring-boot2-starter</artifactId>   <version>2.8.0-release</version>
</dependency><!--j2cache的核心包(奇怪,干嘛不放起步依赖里)-->
<dependency>    <groupId>net.oschina.j2cache</groupId>    <artifactId>j2cache-core</artifactId>    <version>2.8.4-release</version>
</dependency>

注意,J2cache起步依赖里包含redis的起步依赖,这是因为J2cache框架的缓存技术默认使用的是Redis

在这里插入图片描述

加入缓存技术所对应的坐标,这里不用Redis,用ehcache:

<dependency>    <groupId>net.sf.ehcache</groupId>    <artifactId>ehcache</artifactId>
</dependency>

application.yaml中加入J2cache的配置:

j2cache:  config-location: j2cache.properties

写j2cache.properties文件,配置一级缓存与二级缓存以及一级缓存数据到二级缓存的发送方式

# 配置1级缓存
j2cache.L1.provider_class = ehcache
ehcache.configXml = ehcache.xml# 配置2级缓存,注意这里的格式,别直接写redis,写供应商类的完整路径
j2cache.L2.provider_class = net.oschina.j2cache.cache.support.redis.SpringRedisProvider
j2cache.L2.config_section = redis  # section,即区域,这里写redis,那下面的redis.xxx的配置就是给我这个二级缓存的,相当于一个前缀
redis.hosts = localhost:6379  # redis.开头,是我二级缓存的配置没错# 即一级二级缓存之间同步数据怎么同步
# 配置1级缓存数据到2级缓存的广播方式:可以使用redis提供的消息订阅模式,也可以使用jgroups多播实现
j2cache.broadcast = net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy

PS,关于配置文件,在library中搜j2cache-core,即它的核心包,底下有文件范例,里面还有属性的解释,copy就行:

在这里插入图片描述

在需要的地方,注入CacheChannel缓存操作对象即可进行缓存数据操作

@Autowired
private CacheChannel cacheChannel;

4、使用举例

还是以上篇模拟手机验证码为例,演示验证码的存取⇒ set、get

@Service
public class SMSCodeServiceImpl implements SMSCodeService {@Autowiredprivate CacheChannel cacheChannel;@Override    public String sendCodeToSMS(String tele) {        String code = codeUtils.generator(tele);        cacheChannel.set("myarea",tele,code);        return code;    }  @Override   public boolean checkCode(String tele,String checkCode) {       String code = cacheChannel.get("myarea",tele).asString();      return checkCode.equals(code);    }
}

5、配置的相关说明

启动日志中发现有警告信息,前面日志框架学习时已经遇到过,SLF4J背后的日志实现技术导入了多种,绑定器发现有多个,这里显示最终使用了logback,那我们去从j2cache的starter中把slfj-simple的依赖排除掉就好。
在这里插入图片描述

再看日志,一级缓存、二级缓存中间有个redis模式为null的警告信息:

在这里插入图片描述

看下上面说的library下j2cache.properties的模板文件,可以直到这个就是Redis的模式选择,在自己的j2cache.properties里配下Redis的模式就可以处理掉这个警告信息。

在这里插入图片描述

还有一个配置:

redis.namespace = mySystemData

key前缀的分组的,默认为空,其余reids配置可自习查看模板文件。另外,还可以设置是否启用二级缓存:

j2cache.l2-cache-open = false # 关闭二级缓存

此时,数据只写往一级缓存,不再写入二级缓存redis

6、小结

到此缓存篇基本整理结束,缓存技术层有:

  • simple
  • ehcache
  • redis
  • memcached

可整合缓存技术的缓存框架有:

  • spring-cache
  • jetcache
  • j2cache

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国庆中秋特辑(五)MySQL如何性能调优?下篇

目录 5.数据库维护6. 数据库调优工具7.数据库架构优化8.代码层面优化9. 硬件层面优化10. 数据库安全 MySQL 性能优化是一项关键的任务&#xff0c;可以提高数据库的运行速度和效率。以下是一些优化方法&#xff0c;包括具体代码和详细优化方案。 接下来详细介绍&#xff0c;共有…

第1篇 目标检测概述 —(3)YOLO系列算法

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLO&#xff08;You Only Look Once&#xff09;系列算法是一种目标检测算法&#xff0c;主要用于实时物体检测。相较于传统的目标检测算法&#xff0c;YOLO具有更快的检测速度和更高的准确率。YOLO系列算法的核心思想是将…

企业怎样选择适合的服务器租用?

随着互联网技术的发展&#xff0c;如何选择企业需要的服务器租用来满足需求是很多企业目前在考虑的问题&#xff0c;今天就让小编来给大家讲一讲吧&#xff01; 确定好服务器的规模和用途。企业首先根据自身的业务情况选择服务器的数量和规模还有性能&#xff0c;小型企业可以…

python复习

1.python属于解释型语言&#xff0c;解释器逐行解释每一句代码&#xff0c;然后执行 编译型语言需要由编译器生成最终可执行文件再执行 2. #单行注释""" 多行注释 """ 注释快捷键ctrl/ 3.变量是在计算机语言中能储存计算结果或表示某个数据…

计算机竞赛 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…

1300*C. Rumor(并查集贪心)

解析&#xff1a; 并查集&#xff0c;求每个集合的最小费用。 每次合并集合的时候&#xff0c;根节点保存当前集合最小的费用。 #include<bits/stdc.h> using namespace std; #define int long long const int N1e55; int n,m,a[N],p[N],cnt[N]; int find(int x){retur…

S5PV210裸机(二):看门狗,栈,icache,SoC时钟,重加载,led

看门狗 电子设备会跑飞或者死机,需要设备自动复位,看门狗是SoC内部定时器,规定时间内需要重新置位,如果没有系统会被强制复位 WTCON&#xff08;0xE2700000&#xff09;&#xff0c;bit5是开关&#xff1a;0关&#xff0c;1开 汇编设置栈和调用C C运行过程中局…

【VINS】苹果手机采集单目相机+IMU数据离线运行VINS-Mono

0.准备工作 开个新坑&#xff0c;之前用Android手机做过离线采集数据的实验&#xff0c;这次用IPhone来测试&#xff01; 1.虚拟机配置Mac OS 下载一个Mac OS 的ios镜像&#xff0c;打开虚拟机按照跟Ubuntu差不多的方式安装&#xff0c;但是发现没有Mac OS的入口。 因为VMwa…

前端两年半,CSDN创作一周年

文章目录 一、机缘巧合1.1、起因1.2、万事开头难1.3、 何以坚持&#xff1f; 二、收获三、日常四、憧憬 五、总结 一、机缘巧合 1.1、起因 最开始接触CSDN&#xff0c;还是因为同专业的同学&#xff0c;将计算机实验课的实验题&#xff0c;记录总结并发在了专业群里。后来正式…

【深入了解Java String类】

目录 String类 常用方法 字符串的不可变性 String的内存分析 StringBuilder类 解释可变和不可变字符串 常用方法 面试题&#xff1a;String&#xff0c;StringBuilder&#xff0c;StringBuffer之间的区别和联系 String类的OJ练习 String类 【1】直接使用&#xff0c…

Arcgis提取玉米种植地分布,并以此为掩膜提取遥感影像

Arcgis提取玉米种植地分布上&#xff0c;并以此为掩膜提取遥感影像 一、问题描述 因为之前反演是整个研究区&#xff0c;然而土地利用类型有很多类&#xff0c;只在农田或者植被上进行反演&#xff0c;需要去除水体、建筑等其他类型&#xff0c;如何处理得到下图中只有耕地类…

【新版】系统架构设计师 - 层次式架构设计理论与实践

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 层次式架构设计理论与实践考点摘要层次式体系结构概述表现层框架设计MVC模式MVP模式MVVM模式使用XML设计表现层表现层中UIP设计思想 中间层架构设计业务逻辑层工作流设计业务逻辑层设计 数据访问层…

热点文章采集-热点资讯采集工具免费

在信息时代&#xff0c;掌握热点资讯、了解热门时事、采集热门文章是许多自媒体从业者和信息追踪者的重要任务。然而&#xff0c;这并不是一项容易的任务。信息的海洋庞大而繁杂&#xff0c;要从中捞取有价值的热点和文章需要耗费大量时间和精力。 热点资讯采集&#xff1a;信息…

矢量图形编辑软件illustrator 2023 mac特点介绍

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软件&am…

C语言实例_调用SQLITE数据库完成数据增删改查

一、SQLite介绍 SQLite是一种轻量级的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一个开源的、零配置的、服务器端的、自包含的、零管理的、事务性的SQL数据库引擎。它被广泛应用于嵌入式设备、移动设备和桌面应用程序等领域。 SQLite的特点包括&…

【Java 进阶篇】MySQL启动与关闭、目录结构以及 SQL 相关概念

MySQL 服务启动与关闭 MySQL是一个常用的关系型数据库管理系统&#xff0c;通过启动和关闭MySQL服务&#xff0c;可以控制数据库的运行状态。本节将介绍如何在Windows和Linux系统上启动和关闭MySQL服务。 在Windows上启动和关闭MySQL服务 启动MySQL服务 在Windows上&#x…

掌动智能:替代JMeter的压力测试工具有哪些

JMeter是一个广泛使用的开源压力测试工具&#xff0c;但在实际应用中&#xff0c;也有一些其他优秀的替代品可供选择。本文将介绍几个可替代JMeter的压力测试工具&#xff0c;它们在功能、性能和易用性方面都具有独特优势&#xff0c;可以满足不同压力测试需求的选择。 一、Gat…

[Linux]线程互斥

[Linux]线程互斥 文章目录 [Linux]线程互斥线程并发访问问题线程互斥控制--加锁pthread_mutex_init函数pthread_mutex_destroy函数pthread_mutex_lock函数pthread_mutex_unlock函数锁相关函数使用示例使用锁的细节加锁解锁的实现原理 线程安全概念常见的线程不安全的情况常见的…

OpenCV之分水岭算法(watershed)

Opencv 中 watershed函数原型&#xff1a; void watershed( InputArray image, InputOutputArray markers ); 第一个参数 image&#xff0c;必须是一个8bit 3通道彩色图像矩阵序列&#xff0c;第一个参数没什么要说的。关键是第二个参数 markers&#xff0c;Opencv官方文档的说…

使用 Ruby 语言来解析开放文档格式 OOXML 文件

在这篇文章中&#xff0c;我们将了解一个开发团队如何解决他们在应用程序中解析数据时遇到的问题。 为了测试 ONLYOFFICE 文档编辑器&#xff0c;我们用Ruby语言开发编写了个docx、xlsx、pptx文件解析器程序&#xff0c;它是免费开源的&#xff0c;被我们放在GitHub和RubyGems…