TangYuan使用教程-緩存

8. 緩存


簡介git

tangyuan框架中自己提供了LocalCache的緩存功能,並整合了一些第三方緩存框架,包括encache、memcache和redis,咱們只須要作一些簡單的配置便可使用緩存功能;同時tangyuan框架還提供了對用戶自定義緩存的支持,在後面內容中將會給你們詳細介紹。github

在tangyuan中,緩存基本的操做有三個,取數據(get),放數據(put)和清除數據(clean);get就是從緩存容器中獲取數據,put就是把數據放入緩存容器中,clean就是根據用戶指定的key,清除容器中對應的緩存數據。redis

8.1 緩存的配置

tangyuan提供了兩種功能的緩存配置方式;一種是獨立緩存,另外一種是緩存組;緩存組實際上是多個獨立緩存或者緩存組的集合,下面將給出給出具體的配置示例和說明。緩存

1. 獨立緩存

示例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

圖片1

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. 緩存組

示例2:

<cacheGroup id="cacheGroup">
	<cache ref="cache1"/>
	<cache ref="cache2"/>
</cacheGroup>

說明:

上述示例中定義了一個id爲cacheGroup的緩存組,其中引用了以前定義的兩個獨立緩存cache1cache2組成了一個緩存組。其實緩存組也能夠認爲是一個獨立的緩存,由於從使用方式上來講和獨立緩存都是同樣的,但也有其不一樣的功能特色。

    1. 緩存組在put的時候,會put其包含的全部緩存容器。
    1. 緩存組在get的時候,會根據其定義的引用順序,從緩存容器中get數據,如上述示例,先從cache1中取,若是取到數據就當即返回,不然會繼續從cache2中獲取數據。
    1. 緩存組在clean的時候,會對cache1和cache2作clean操做。 緩存組的組合通常是本地緩存加上分佈式緩存,本地緩存能夠經過配置其緩存策略和有效閥值,少許緩存部分數據,分佈式緩存可根據應用場景,緩存大量數據,甚至作一些緩存的持久化。

Schema設計圖:

圖片1

cacheGroup節點屬性說明:

屬性名 用途及說明 必填 取值
id cacheGroup的惟一標識,不可重複。 Y 用戶定義
default 是不是默認緩存,若是系統中配置多個緩存包括cacheGroup,則只能有一個爲默認的 N 用戶定義

cache節點屬性說明:

屬性名 用途及說明 必填 取值
ref 所引用cache的id Y 用戶定義
include 所包含的SQL服務ID,若是用戶須要手工指定可設置此項,多個服務能夠逗號隔開,支持*匹配,如user.* N 用戶定義
exclude 須要排除的SQL服務ID,若是用戶須要手工指定可設置此項,多個服務能夠逗號隔開,支持*匹配,如user.* N 用戶定義

8.2 緩存的使用

tangyuan框架中cache的使用是經過設置SQL服務標籤的屬性來實現的。例如:

<selectOne id="getUserById" cacheUse="id:cache1; key:${service}; time:1">
	SELECT * from user WHERE user_id = #{user_id}
</selectOne>

和cache相關的屬性有兩個,cacheUsecacheClean。以前在介紹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服務標籤可參考以前的標籤屬性說明。

8.3 用戶自定義緩存的使用

示例:

<cache id="cache1" class="xxx.UserCache" />

說明:

xxx.UserCache須要實現org.xson.tangyuan.cache.ICache接口,若是用戶想在定義cache的時候設置一些參數的可以使用property節點和resource屬性。

到此,本章節的內容就結束了,感興趣的朋友能夠關注TangYuan項目。

相關文章
相關標籤/搜索