简介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项目。