前言
經(jīng)過近幾天陸續(xù)發(fā)布Cache
系列博文,博主已對業(yè)界主流的緩存工具進(jìn)行了基本介紹,當(dāng)然也提到了一些基本技巧。相信各位盆友看見這么多Cache
工具后,在選型上一定存在某些偏愛:
A同學(xué)說:不管業(yè)務(wù)千變?nèi)f化,我對Redis的愛永不變。
B同學(xué)說:不管集中式還是分布式,單體還是集群,我只相信Redis。
C同學(xué)說:無論穿透擊穿還是雪崩,只要把key定義好,任爾東西南北風(fēng)。
好了,看完這篇文章,希望以上同學(xué)有所啟發(fā)。
- 微服務(wù)實(shí)戰(zhàn)系列之Cache(技巧篇)
- 微服務(wù)實(shí)戰(zhàn)系列之MemCache
- 微服務(wù)實(shí)戰(zhàn)系列之EhCache
- 微服務(wù)實(shí)戰(zhàn)系列之Redis
- 微服務(wù)實(shí)戰(zhàn)系列之Cache
- 微服務(wù)實(shí)戰(zhàn)系列之Nginx(技巧篇)
- 微服務(wù)實(shí)戰(zhàn)系列之Nginx
- 微服務(wù)實(shí)戰(zhàn)系列之Feign
- 微服務(wù)實(shí)戰(zhàn)系列之Sentinel
- 微服務(wù)實(shí)戰(zhàn)系列之Token
- 微服務(wù)實(shí)戰(zhàn)系列之Nacos
- 微服務(wù)實(shí)戰(zhàn)系列之Gateway
- 微服務(wù)實(shí)戰(zhàn)系列之加密RSA
- 微服務(wù)實(shí)戰(zhàn)系列之簽名Sign
一、J2Cache介紹
1. 背景
當(dāng)我們?yōu)闃I(yè)務(wù)系統(tǒng)引入緩存時,會考慮哪些方面?
比如為了追求體驗(yàn)好,(業(yè)務(wù)量不大時)單點(diǎn)集成 redis
或ehcache
,似乎沒問題;進(jìn)一步為了追求緩存的一致性,部署一套redis集群,也是可行的。
但redis畢竟是“消耗品”
,內(nèi)存有多珍貴,價(jià)格有多昂貴。為了追求緩存共享,我們可能投入比較高的成本才能如愿。該怎么辦?好比數(shù)據(jù)庫的“護(hù)衛(wèi)”
是緩存,那么redis的“護(hù)衛(wèi)”
又是誰可以勝任呢?答案是ehcache(推薦
)。
此刻,其實(shí)我們已做了兩級
緩存的設(shè)計(jì),如一級緩存沒有hit,繼續(xù)找二級緩存,實(shí)在不行才去敲數(shù)據(jù)庫的“門”
。
敘述到此,J2Cache應(yīng)運(yùn)而生,它為兩級緩存的設(shè)計(jì)和實(shí)現(xiàn)提供了解決方案。
J2Cache
是 OSChina 目前正在使用的兩級緩存框架(要求至少 Java 8)。第一級緩存使用內(nèi)存(同時支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二級緩存使用 Redis(推薦)/Memcached 。 由于大量的緩存讀取會導(dǎo)致 L2 的網(wǎng)絡(luò)成為整個系統(tǒng)的瓶頸,因此 L1 的目標(biāo)是降低對 L2 的讀取次數(shù)。 該緩存框架主要用于集群環(huán)境中。單機(jī)也可使用,用于避免應(yīng)用重啟導(dǎo)致的緩存冷啟動后對后端業(yè)務(wù)的沖擊。
通過兩級緩存機(jī)制,對緩存進(jìn)行錯峰控制,降低對Redis的消耗,同時提高一級緩存的使用率,從而實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)的性能整體提升。
那么,兩級緩存是如何協(xié)作呢?請把目光聚焦下圖:
2. 入門
如何入門,可參考該博主進(jìn)行學(xué)習(xí):手把手入門
如果能夠親自嘗試一把,一定能夠體會它的美,博主不再贅述。
二、J2Cache組播
1. 工作原理
學(xué)會J2Cache的基本使用之后,應(yīng)該要關(guān)注如何完成緩存同步了。
J2Cache提供了兩種方案:基于Redis Pub/Sub(發(fā)布/訂閱,不推薦
)或基于JGroups廣播(推薦TCP
模式)。無論選擇哪種模式,最終做到緩存保持同步。
鑒于Redis發(fā)布/訂閱的一些“槽點(diǎn)”
,博主推薦使用JGroups廣播機(jī)制。
通過上圖我們可以看到,當(dāng)數(shù)據(jù)更新時,一級二級緩存是如何協(xié)同并保持一致的過程。
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>
結(jié)語
J2Cache
為我們合理使用緩存,有效利用緩存資源,提供了很好的方案。
這個時代,合作才是前進(jìn)的保障和希望。在微服務(wù)界也是如此,有“種菜”
的自然就有“洗菜”
的,有“洗菜”
的自然就有“配菜”
的。
今日至此,博主的Cache
系列也要告一段落了,希望各位盆友有所收獲!
最后,博主送給大家一句話:無論是哪種“菜”
,一定要先嘗為快,切忌囫圇吞棗。文章來源:http://www.zghlxwxcb.cn/news/detail-756684.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-756684.html
到了這里,關(guān)于微服務(wù)實(shí)戰(zhàn)系列之J2Cache的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!