jeeshop中通过SystemManager
管理了大量的缓存数据,来提升系统的性能,但这些缓存数据全部都是存放于内存中的,无法满足特定场景的数据更新(如集群环境)。JShop对jeeshop的缓存机制进行了扩展,提供CacheProvider
来辅助SystemManager
管理这些缓存数据,通过CacheProvider
,可以把缓存存放在内存,ehcache,redis,memcached等各种不同的容器中,从而实现高度可定制的缓存管理机制。
JShop中提供了三种不同类型的CacheProvider
,分别为SimpleCacheProvider
,EhcacheCacheProvider
和RedisCacheProvider
, 分别使用内存,ehcache和redis来管理缓存数据. 开发者可以方便地定制自己的CacheProvider
,来实现对缓存的管理。
public interface CacheProvider {
/**
* 放入cache中
* @param key
* @param cacheObject
*/
public void put(String key, Serializable cacheObject);
/**
* 获取放在cache中的内容
* @param key
* @return
*/
public Serializable get(String key);
/**
* 清除cache中对应的值
* @param key
*/
public void remove(String key);
/**
* 清除所有的cache
*/
public void clear();
}
Jshop的缓存机制配置位于spring/applicationContext-cache.xml
, 缓存配置示例如下:
<bean id="systemManager" class="net.jeeshop.core.front.SystemManager">
<property name="cacheProvider" ref="ehcacheCacheProvider"/>
</bean>
<bean id="ehcacheCacheProvider" class="net.jeeshop.core.cache.EhcacheCacheProvider">
<property name="configLocation" value="classpath:ehcache.xml"></property>
<property name="cacheName" value="eternalCache"/>
</bean>
SimpleCacheProvider
内部通过Map来将所有缓存数据存放在内存中,所以相对简单,并会占用较多的内存资源,可以在一般的小型应用中使用,它的使用不需要其他的配置信息,只需要在配置文件中注入到systemManager即可,如:
<bean id="systemManager" class="net.jeeshop.core.front.SystemManager">
<property name="cacheProvider" ref="simpleCacheProvider"/>
</bean>
<!-- cache provider -->
<bean id="simpleCacheProvider" class="net.jeeshop.core.cache.SimpleCacheProvider"/>
EhcacheCacheProvider
通过ehcache管理缓存数据,使用它需要提供两个属性:?configLocation
: ehcache配置文件路径?cacheName
?: 所用的Cache名称(这里需要配置cache为永不过期,即eternal=true) 示例:
<bean id="ehcacheCacheProvider" class="net.jeeshop.core.cache.EhcacheCacheProvider">
<property name="configLocation" value="classpath:ehcache.xml"></property>
<property name="cacheName" value="eternalCache"/>
</bean>
EhcacheCacheProvider
通过redis管理缓存数据,使用它需要提供Redis相关的配置信息,如数据源,连接池等。 相关的配置位于conf.properties
,如下:
##redis配置##
redis.ip=localhost
redis.port=6379
redis.password=
redis.pool.maxIdle=200
redis.pool.testOnBorrow=true
完整的spring配置信息如下:
<bean id="redisCacheProvider" class="net.jeeshop.core.cache.RedisCacheProvider">
<property name="redisTemplate" ref="redisTemplate"/>
</bean>
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.ip}"/>
<property name="port" value="${redis.port}"/>
<property name="password" value="${redis.password}"/>
<property name="poolConfig" ref="jedisPoolConfig"/>
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!--<property name="maxActive" value="${redis.pool.maxActive}"/>-->
<property name="maxIdle" value="${redis.pool.maxIdle}"/>
<!--<property name="maxWait" value="${redis.pool.maxWait}"/>-->
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
</bean>
原文:http://dinguangx.iteye.com/blog/2214133