微服务实战系列之J2Cache

2023-12-12 04:30
文章标签 实战 服务 系列 j2cache

本文主要是介绍微服务实战系列之J2Cache,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

经过近几天陆续发布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系列也要告一段落了,希望各位盆友有所收获!

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

在这里插入图片描述

这篇关于微服务实战系列之J2Cache的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483233

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹