微服务实战系列之J2Cache

news2024/11/23 19:44:38

前言

经过近几天陆续发布Cache系列博文,博主已对业界主流的缓存工具进行了基本介绍,当然也提到了一些基本技巧。相信各位盆友看见这么多Cache工具后,在选型上一定存在某些偏爱:
A同学说:不管业务千变万化,我对Redis的爱永不变。
B同学说:不管集中式还是分布式,单体还是集群,我只相信Redis。
C同学说:无论穿透击穿还是雪崩,只要把key定义好,任尔东西南北风。

好了,看完这篇文章,希望以上同学有所启发。


  • 微服务实战系列之Cache(技巧篇)
  • 微服务实战系列之MemCache
  • 微服务实战系列之EhCache
  • 微服务实战系列之Redis
  • 微服务实战系列之Cache
  • 微服务实战系列之Nginx(技巧篇)
  • 微服务实战系列之Nginx
  • 微服务实战系列之Feign
  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway
  • 微服务实战系列之加密RSA
  • 微服务实战系列之签名Sign

一、J2Cache介绍

1. 背景

当我们为业务系统引入缓存时,会考虑哪些方面?
比如为了追求体验好,(业务量不大时)单点集成 redisehcache,似乎都没有太大问题;进一步为了追求缓存的一致性,部署一套redis集群,也是可行的。

但redis毕竟是“消耗品”,内存有多珍贵,价格有多昂贵。为了追求缓存共享,我们可能投入比较高的成本才能如愿。该怎么办?好比数据库的“护卫”是缓存,那么redis的“护卫”又是谁可以胜任呢?答案是ehcache(推荐)。

此刻,其实我们已做了两级缓存的设计,如一级缓存没有hit,继续找二级缓存,实在不行才去敲数据库的“门”

叙述到此,J2Cache应运而生,它为两级缓存的设计和实现提供了解决方案。

J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached 。 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。 该缓存框架主要用于集群环境中。单机也可使用,用于避免应用重启导致的缓存冷启动后对后端业务的冲击。

通过两级缓存机制,对缓存进行错峰控制,降低对Redis的消耗,同时提高一级缓存的使用率,从而实现业务系统的性能整体提升。
那么,两级缓存是如何协作呢?请把目光聚焦下图:
在这里插入图片描述

2. 入门

如何入门,可参考该博主进行学习:手把手入门
如果能够亲自尝试一把,一定能够体会它的美,博主不再赘述。

二、J2Cache组播

1. 工作原理

学会J2Cache的基本使用之后,应该要关注如何完成缓存同步了。
J2Cache提供了两种方案:基于Redis Pub/Sub(发布/订阅,不推荐)或基于JGroups广播(推荐TCP模式)。无论选择哪种模式,最终做到缓存保持同步。
鉴于Redis发布/订阅的一些“槽点”,博主推荐使用JGroups广播机制。

在这里插入图片描述
通过上图我们可以看到,当数据更新时,一级二级缓存是如何协同并保持一致的过程。

2. 使用方式
  • (1)j2cache.properties
//指定广播方式
j2cache.broadcast = jgroups  
jgroups.channel.name = j2cache
//指定Jgroup为TCP广播并配置
jgroups.configXml = /j2cache/network-tcp.xml 
//指定一级缓存
j2cache.L1.provider_class = ehcache
//指定二级缓存
j2cache.L2.provider_class = redis
//ehcache配置
ehcache.configXml=/j2cache/ehcache.xml
  • (2)network-tcp.xml
<config xmlns="urn:org:jgroups"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups.xsd">
    <TCP bind_port="7800" />
    <TCPPING timeout="3000"
             initial_hosts="192.168.1.11[7800],192.168.1.12[7800]"
             port_range="1"
             num_initial_members="2"/>
    <MERGE2  min_interval="10000" max_interval="30000"/>
    <FD_SOCK/>
    <FD timeout="3000" max_tries="3" />
    <VERIFY_SUSPECT timeout="1500"  />
    <BARRIER />
    <pbcast.NAKACK2 use_mcast_xmit="false" discard_delivered_msgs="true"/>
    <UNICAST3 />
    <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="4M"/>
    <pbcast.GMS print_local_addr="true" join_timeout="3000" view_bundling="true"/>
    <MFC max_credits="2M" min_threshold="0.4"/>
    <FRAG2 frag_size="60K"  />
    <pbcast.STATE_TRANSFER/>
</config>

结语

J2Cache为我们合理使用缓存,有效利用缓存资源,提供了很好的方案。
这个时代,合作才是前进的保障和希望。在微服务界也是如此,有“种菜”的自然就有“洗菜”的,有“洗菜”的自然就有“配菜”的。
今日至此,博主的Cache系列也要告一段落了,希望各位盆友有所收获!

最后,博主送给大家一句话:无论是哪种“菜”,一定要先尝为快,切忌囫囵吞枣。

在这里插入图片描述

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

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

相关文章

HarmonyOS学习--TypeScript语言学习(一)

本章目录如下&#xff1a; 一、TypeScript语言介绍 二、TypeScript使用工具 三、TypeScript基础知识 四、TypeScript 与面向对象 五、TypeScript 保留关键字 为什么要学习TypeScript语言呢&#xff1f; 因为ArkTS语言是围绕应用开发在TypeScript&#xff08;简称TS&#xff…

STM32(PWM、ADC)

1、PWM 定义 PWM&#xff0c;全称为脉冲宽度调制&#xff08;Pulse Width Modulation&#xff09;&#xff0c;它通过改变信号的高电平和低电平的持续时间比例来控制输出信号的平均功率或电压。 PWM&#xff0c;全称为脉冲宽度调制&#xff08;Pulse Width Modulation&#xff…

STM32(DMA、DHT11)

1、DMA&#xff08;数据的搬运工&#xff09; DMA&#xff0c;全称为&#xff1a;Direct Memory Access&#xff0c;即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场的过程&#xff0c;通过硬件为 RAM 与 I/O 设备开…

基于Python+OpenCV的车道线和车辆检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 本文将介绍如何使用Python编程语言结合OpenCV库进行车道线和车辆检测。这种技术常用于计算机视觉领域&#xff0c;特…

优秀编程习惯一: Git提交如何写注释

feat feat - A new feature : 一个新功能 fix fix - A bug fix : bug修复 docs docs - Documentation only changes : 仅更改文档 style style - Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) : 不影响代…

arduino - L7805CV三端稳压器

一、 介绍&#xff08;摘抄&#xff09; L7805CV是三端稳压器&#xff0c;78是正电压稳压&#xff0c;和它对应的79就是负电压&#xff0c;稳压05是传输电压的数值&#xff0c;所以它的意思就是正5伏的三端稳压器&#xff0c;通常可以直接代换&#xff0c;就是说它的输出电压在…

Pycharm的字体缩放设置

法1 法2 放大操作 increase 缩小操作 decrease 保存操作&#xff0c;点击OK结束

Spring Cloud + Vue前后端分离-第3章 SpringBoot项目技术整合

Spring Cloud Vue前后端分离-第3章 SpringBoot项目技术整合 3-1 集成持久层框架Mybatis ORM:对象关系映射&#xff0c;Hibernate是全自动ORM&#xff0c;Mybatis是半自动ORM&#xff0c;Mybatis可以操作的花样更多&#xff0c;是首选的持久层框架 System模块集成Mybatis框架…

如何利用Axure制作移动端产品原型

Axure是一款专业的快速原型设计工具&#xff0c;作为专业的原型设计工具&#xff0c;Axure 能够快速、高效地创建原型&#xff0c;同时支持多人协作设计和版本控制管理。它已经得到了许多大公司的采用&#xff0c;如IBM、微软、思科、eBay等&#xff0c;这些公司都利用Axure 进…

TA-Lib学习研究笔记(九)——Pattern Recognition (2)

TA-Lib学习研究笔记&#xff08;九&#xff09;——Pattern Recognition &#xff08;2&#xff09; 形态识别的函数的应用&#xff0c;通过使用A股实际的数据&#xff0c;验证形态识别函数&#xff0c;用K线显示出现标志的形态走势&#xff0c;由于入口参数基本上是open, hig…

并发集合框架

目录 前言 正文 1.集合框架结构 2. ConcurrentHashMap &#xff08;1&#xff09;验证 HashMap 不是线程安全的 &#xff08;2&#xff09;验证 Hashtable 是线程安全的 &#xff08;3&#xff09;验证 Hashtable 不支持并发 remove 操作 &#xff08;4&#xff09…

graphics.h安装后依旧报错

问题解决一&#xff1a; 我在网上找了很多&#xff0c;都说找到graphics.h这个文件&#xff0c;放到include这个目录下&#xff0c;我照做了&#xff0c;然后 当我进行编译时&#xff0c;自动跳到graphics.h这个文件并出现一堆报错 问题解决二&#xff1a; 看一下这两个文件是…

摄像头选型号指南

镜头选型工具 - HiTools - 海康威视 Hikvisionhttps://www.hikvision.com/cn/support/tools/hitools/cl8a9de13648c56d7f/ 1. 海康威视摄像头选型号指南 海康威视摄像头选型号指南-CSDN博客文章浏览阅读3.7k次。跟客服对话比跟AI对话好不了多少&#xff0c;能噎死人&#xff0…

题目:区间更新(蓝桥OJ 3291)

题目描述&#xff1a; 解题思路&#xff1a; 差分模板题。 题解&#xff1a; #include<bits/stdc.h> using namespace std;const int N 1e5 10; int a[N], diff[N] ;//数组的大小不可能开到大于1e9int res(int n, int m) {for(int i 1; i < n; i)cin >&g…

对比两阶段提交,三阶段协议有哪些改进?

本文我们来讨论两阶段提交和三阶段提交协议的过程以及应用。 在分布式系统中&#xff0c;各个节点之间在物理上相互独立&#xff0c;通过网络进行沟通和协调。在关系型数据库中&#xff0c;由于存在事务机制&#xff0c;可以保证每个独立节点上的数据操作满足 ACID。但是&…

AI模型部署 | onnxruntime部署YOLOv8分割模型详细教程

本文首发于公众号【DeepDriving】&#xff0c;欢迎关注。 0. 引言 我之前写的文章《基于YOLOv8分割模型实现垃圾识别》介绍了如何使用YOLOv8分割模型来实现垃圾识别&#xff0c;主要是介绍如何用自定义的数据集来训练YOLOv8分割模型。那么训练好的模型该如何部署呢&#xff1f…

小航助学题库白名单竞赛考级蓝桥杯等考scratch(10级)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

chineseocr项目不使用web推理-docker容器化

整个流程介绍 拉取 ufoym/deepo 镜像 -- 因为包含了主流深度学习框架&#xff0c;镜像4G出头。拉取 chineseocr 项目代码。修改代码&#xff0c;不使用web&#xff0c;增加命令行传入图片路径的功能打包成docker镜像。 开始 拉取 ufoym/deepo 镜像 &#xff1a;cpu版本为例 do…

封装ThreadLocal

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 为什么要封装ThreadLoc…

geemap学习笔记020:如何搜索Earth Engine Python脚本

前言 本节内容比较简单&#xff0c;但是对于自主学习比较重要&#xff0c;JavaScript提供了很多的示例代码&#xff0c;为了便于学习&#xff0c;geemap将其转为了Python代码。 Earth Engine Python脚本 import ee import geemapee.Initialize()geemap.ee_search() #搜索Ear…