分布式下mybatis二級快取資料一致性解決辦法

2021-10-12 17:35:34 字數 1977 閱讀 5607

背景:

實際專案中,很多地方需要把資料快取起來,以加快資料訪問速度。比如字典表,比如資料機房表等等,快取的實現有很多方式,如果專案中有用到mybatis,可以使用二級快取來解決資料的快取問題。

現狀:一般mybatis通過oscache來實現他的二級快取,然而這種方式存在如下幾個問題:

1、oscache可以用來快取頁面和資料物件,但資料通常存放在記憶體中,專案多例項環境下無法解決快取更新和過期的問題。

2、oscache可以將資料通過io寫到硬碟保持資料一致性,但此舉會浪費資源

解決方案:

使用redis實現一套mybatis二級快取外掛程式,將資料從記憶體轉移到redis中,各個專案訪問唯一乙個redis例項(或集群),這樣就保證在任意時刻,快取的變化都會被所有專案感知,並使用最新的快取資料;同時,redis的高效能也保證了快取資料的高速讀取。

實現步驟:

目前mybatis社群開放了mybatis-redis專案,可以從**倉庫獲取對應依賴。

pom.xml

org.mybatis.caches

mybatis-redis

1.0.0-beta2

redis.clients

jedis

2.8.0

src/redis.properties

blockwhenexhausted=true

evictionpolicyclassname=org.apache.commons.pool2.impl.defaultevictionpolicy

fairness=false

host=127.0.0.1

port=6379

jmxenabled=true

jmxnamebase=pool

jmxnameprefix=pool

lifo=true

maxidle=8

maxtotal=8

maxwaitmillis=-1

minevictableidletimemillis=60000

minidle=0

numtestsperevictionrun=-1

softminevictableidletimemillis=1800000

testonborrow=false

testoncreate=false

testonreturn=false

testwhileidle=true

timebetweenevictionrunmillis=3000

insert into l_access (

id,……

)

values

(

#,……

);

mybatis二級快取

配置檔案 不用配置也是預設開啟的 在sqlmapconfig.xml中 cacheenabled value true 如果不需要二級快取,可以在設定禁用二級快取 select 這樣每次都是從資料庫中讀取 在執行insert,update,delete後會重新整理快取 清空快取 可以設定不重新整理 ...

mybatis 二級快取

一 mybatis 二級快取 3 mybatis 預設二級快取未開啟 內建是支援二級快取的。但是由於本身是資料庫管理元件 所以快取並不好用 所以還是要用第三方的快取機制。典型的 ehcache 二 二級快取的常見演算法 lru least recently used 這種演算法是在每個物件中維護乙個...

Mybatis二級快取

原文找不到了,如果作者看到了可以留下位址,我再加上引用 sqlsession2去查詢使用者id為1的使用者資訊,去快取中找是否存在資料,如果存在直接從快取中取出資料。明白了mybatis中二級快取的原理後,接下來就是如何使用二級快取了。在使用之前,首先得開啟二級快取的開關。2.1 開啟二級快取 2....