1. 程式人生 > >spring專案中通過xml配置快取(cache)記錄貼

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中。