簡介git
tangyuan框架中自己提供了LocalCache的緩存功能,並整合了一些第三方緩存框架,包括encache、memcache和redis,咱們只須要作一些簡單的配置便可使用緩存功能;同時tangyuan框架還提供了對用戶自定義緩存的支持,在後面內容中將會給你們詳細介紹。github
在tangyuan中,緩存基本的操做有三個,取數據(get),放數據(put)和清除數據(clean);get就是從緩存容器中獲取數據,put就是把數據放入緩存容器中,clean就是根據用戶指定的key,清除容器中對應的緩存數據。redis
tangyuan提供了兩種功能的緩存配置方式;一種是獨立緩存,另外一種是緩存組;緩存組實際上是多個獨立緩存或者緩存組的集合,下面將給出給出具體的配置示例和說明。緩存
示例1:框架
<cache id="cache1" type="local"> <property name="strategy" value="time"/> <property name="survivalTime" value="10"/> <property name="log" value="true"/> </cache>
說明:分佈式
示例1中配置了一個id爲cache1的獨立緩存,type爲local表示這是一個localcache,由tangyuan框架自己提供其功能實現。memcached
Schema設計圖:debug
cache節點屬性說明:設計
屬性名 | 用途及說明 | 必填 | 取值 |
---|---|---|---|
id | cache的惟一標識,不可重複 | Y | 用戶定義 |
type | cache的實現類型,這裏指的是系統默認實現和整合第三方,若是用戶須要使用自定義的緩存實現,可省略此項配置,設置class屬性。 | N | local/ehcache/memcache/redis |
class | 用戶自定義的緩存實現類;須要實現org.xson.tangyuan.cache.ICache接口 | N | 用戶定義 |
resource | 外部緩存配置的資源路徑 | N | 用戶定義 |
default | 是不是默認緩存,若是系統中配置多個緩存包括cacheGroup,則只能有一個爲默認的 | N | 用戶定義 |
property節點屬性說明:日誌
屬性名 | 用途及說明 | 必填 | 取值 |
---|---|---|---|
name | cache配置項的屬性名 | Y | 用戶定義 |
value | cache配置項的屬性值 | Y | 用戶定義 |
localCache是tangyuan系統默認的緩存實現,其核心是一個基於Java內存的key/value Cache,其中支持5中緩存策略:
名稱 | 說明 |
---|---|
lru | 最近最少使用策略 |
fifo | 先進先出策略 |
soft | 軟引用策略 |
weak | 弱引用策略 |
time | 有效期策略 |
A. localCache使用time策略示例:
<cache id="cache1" type="local"> <property name="strategy" value="time"/> <!--使用有效期策略--> <property name="survivalTime" value="10"/> <!--有效期時間10秒--> <property name="log" value="true"/> <!--開啓命中率日誌,須要把日誌級別設爲debug--> </cache>
B. localCache使用lru策略示例:
<cache id="cache1" type="local"> <property name="strategy" value="lru"/> <!--使用最近最少使用策略--> <property name="maxSize" value="1000"/> <!--緩存容器最大存儲數量--> <property name="log" value="true"/> <!--開啓命中率日誌,須要把日誌級別設爲debug--> </cache>
此配置可適用fifo, soft, weak策略。
除了local cache,tangyuan框架還整合了第三方cache,encache、memcache和redis,下面是具體的配置方式:
C. ehcache配置實例:
<cache id="cache1" type="ehcache" resource="ehcache.xml" />
使用ehcache須要經過配置resource屬性,加載外部配置文件來進行實例化,ehcache.xml文件內容詳見其官方文檔。
D. memcached配置實例:
<cache id="cache1" type="memcache"> <property name="serverlist" value="127.0.0.1:11211"/> <property name="weights" value="1"/> </cache>
property節點中可設置memcached具體的參數,詳見memcached Java API官方文檔
E. redis配置實例:
<cache id="cache1" type="redis" resource="redis.basic.properties" />
使用redis也須要經過配置resource屬性,加載外部配置文件來進行實例化,redis.basic.properties
文件內容以下:
JedisMode=BASIC Jedis.clientName=life_client Jedis.host=127.0.0.1 Jedis.pool.maxTotal=8 Jedis.pool.maxIdle=8 Jedis.pool.minIdle=2 Jedis.pool.testOnCreate=false Jedis.pool.testOnBorrow=false Jedis.pool.testOnReturn=false Jedis.pool.testWhileIdle=false Jedis.pool.maxWaitMillis=-1 Jedis.pool.minEvictableIdleTimeMillis=1800000 Jedis.pool.timeBetweenEvictionRunsMillis=-1 Jedis.pool.numTestsPerEvictionRun=3
示例2:
<cacheGroup id="cacheGroup"> <cache ref="cache1"/> <cache ref="cache2"/> </cacheGroup>
說明:
上述示例中定義了一個id爲cacheGroup
的緩存組,其中引用了以前定義的兩個獨立緩存cache1
和cache2
組成了一個緩存組。其實緩存組也能夠認爲是一個獨立的緩存,由於從使用方式上來講和獨立緩存都是同樣的,但也有其不一樣的功能特色。
Schema設計圖:
cacheGroup節點屬性說明:
屬性名 | 用途及說明 | 必填 | 取值 |
---|---|---|---|
id | cacheGroup的惟一標識,不可重複。 | Y | 用戶定義 |
default | 是不是默認緩存,若是系統中配置多個緩存包括cacheGroup,則只能有一個爲默認的 | N | 用戶定義 |
cache節點屬性說明:
屬性名 | 用途及說明 | 必填 | 取值 |
---|---|---|---|
ref | 所引用cache的id | Y | 用戶定義 |
include | 所包含的SQL服務ID,若是用戶須要手工指定可設置此項,多個服務能夠逗號隔開,支持*匹配,如user.* |
N | 用戶定義 |
exclude | 須要排除的SQL服務ID,若是用戶須要手工指定可設置此項,多個服務能夠逗號隔開,支持*匹配,如user.* |
N | 用戶定義 |
tangyuan框架中cache的使用是經過設置SQL服務標籤的屬性來實現的。例如:
<selectOne id="getUserById" cacheUse="id:cache1; key:${service}; time:1"> SELECT * from user WHERE user_id = #{user_id} </selectOne>
和cache相關的屬性有兩個,cacheUse
和cacheClean
。以前在介紹SQL服務標籤的屬性的時候常常看到,這裏咱們來進行詳細的說明。
cacheUse屬性:表示了SQL服務將使用cache的get和put操做,每次訪問SQL服務的時候會先從cache中獲取數據,若是取得數據則直接返回,不然將執行SQL服務,並將SQL服務返回的結果放入cache中,而後返回結果。
cacheUse屬性示例:
cacheUse="id:cache1; key:user; time:1" cacheUse="id:cache1; key:yyy.z.${service}.xxx; time:1" cacheUse="id:cache1; key:a.${service}.z.${args}.{user_id}.zzz; time:1" cacheUse="id:cache1; key:${service}; time:1"
cacheUse屬性的語法格式:id:xxx; key:xxx; time:xxx
屬性名 | 用途及說明 | 必填 | 取值 |
---|---|---|---|
id | 所使用的緩存容器的id | N | 用戶定義 |
key | 緩存項key | Y | 支持特殊的語法定義 |
time | 緩存內容的存活時間,單位秒,若是用戶未指定此項,將會使用cache容器的默認設置。 | N | 用戶定義 |
key語法示例:key:a.${service}.b.${args}.c.{user_id}.d
cacheUse key特殊語法說明:
語法 | 說明 |
---|---|
${service} | 此SQL服務的ID |
${args} | 調用此的請求參數(每次可能不相同);解析的時候會先將其序列化成字符串,而後將獲得字符串進行MD5運算,將結果做爲key值得一部分。 |
{user_id} | 從調用此的請求參數中獲取user_id的值,將其做爲key值得一部分。 |
a/b/c/d | 用戶自行設置的字符串常量 |
具體可適用cacheUse屬性的SQL服務標籤可參考以前的標籤屬性說明。
示例:
<cache id="cache1" class="xxx.UserCache" />
說明:
xxx.UserCache須要實現org.xson.tangyuan.cache.ICache
接口,若是用戶想在定義cache的時候設置一些參數的可以使用property
節點和resource
屬性。
到此,本章節的內容就結束了,感興趣的朋友能夠關注TangYuan項目。