spring專案中通過xml配置快取(cache)記錄貼
配置一個spring預設實現的快取(cache)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <!--啟用快取 --> <cache:annotation-driven /> <!-- 宣告快取管理器 --> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="caches"> <set> <bean name="myCache" class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"></bean> </set> </property> </bean> </beans>
如上圖所式,
第一步 啟用快取
第二步 宣告快取管理器。
這裡的快取管理器
SimpleCacheManager
這是一個spring內建快取管理器的實現,使用屬性注入注入一個
ConcurrentMapCacheFactoryBean。
這是一個spring的基於HashMap的實現的快取。個人理解就是利用java的map集合做的一個在記憶體中的快取。
第三部 開始使用快取,這裡對於快取的使用是基於spring的註解。如
@Cacheable(value = "myCache", key = "'employee.'+#p0")
@CacheEvict(value = "myCache", key = "'employee.'+#p0")
@CachePut(value = "myCache", key = "'employee.'+#p0")
不再贅述各個註解的具體使用方法。
spring整合配置ehcache快取
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <!--啟用快取 --> <cache:annotation-driven /> <!-- 宣告快取管理器 --> <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml"/> </bean> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="cacheManagerFactory"/> </bean> </beans>
第一步:在spring專案中,新增ehcache的相關jar包。
第二步:上圖的xml配置檔案,和第一個很類似,不過這裡的cacheFactory換成了ehcache的了。
第三步:既然是基於ehcache的快取,自然需要使用ehcache的配置檔案。這個在第二步裡面也有引用。我的配置如下。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="c:/ehcache"/>
<defaultCache
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"/>
<cache name="myCache"
maxElementsOnDisk="20000"
maxElementsInMemory="1000"
eternal="true"
overflowToDisk="true"
diskPersistent="true"/>
</ehcache>
配置完上面這些,關於快取的使用我這裡都是基於註解的,所以程式碼裡未做任何改變。依然ok。
配置redis快取
配置redis快取前,需要匯入相關的jar包並且配置一些reids的配置
jar包 spring-data-redis
jedis
commons-pool2(jedis的連線池)
接下來,我將把所有的reids和使用redis做快取的配置寫在一個配置檔案中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!--啟用快取 -->
<cache:annotation-driven />
<!-- 配置jedis連線池 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="50" />
<property name="maxTotal" value="100" />
<property name="maxWaitMillis" value="20000" />
</bean>
<!--配置jedis的連線工廠 -->
<bean id="connectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="127.0.0.1"></property>
<property name="port" value="6379" />
<property name="usePool" value="true" />
<property name="poolConfig" ref="poolConfig" />
</bean>
<!--主鍵的序列化方式 -->
<bean id="stringRedisSerializer"
class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<!--物件的序列化方式 -->
<bean id="jdkSerializationRedisSerializer"
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
<!-- 配置redisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="defaultSerializer" ref="stringRedisSerializer" />
<property name="keySerializer" ref="stringRedisSerializer" />
<property name="valueSerializer" ref="jdkSerializationRedisSerializer" />
</bean>
<!-- 宣告reids快取管理器 -->
<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
<constructor-arg index="0" ref="redisTemplate"></constructor-arg>
</bean>
</beans>
如上面的配置檔案
第一步:啟用快取
第二步: 配置jedis連線池
第三步:配置jedis的連線工廠
第四部:主鍵的序列化方式
第五步:物件的序列化方式
第六步:配置redisTemplate
第七步:宣告reids快取管理器
做好了上面的配置之後,同樣的在程式中使用註解來使用快取,效果如下圖。快取需要快取的物件被放入了redis中。