Spring cache和Spring data redis整合

maven 依赖

<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-redis</artifactId>
	<version>1.7.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>javax.cache</groupId>
	<artifactId>cache-api</artifactId>
	<version>1.0.0</version>
</dependency>

spring-cache.xml配置

<!-- spring-data-redis配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<property name="maxIdle" value="${redis.pool.maxIdle}"/>
	<property name="maxTotal" value="${redis.pool.maxActive}"/>
	<property name="maxWaitMillis" value="${redis.pool.maxWait}"/>
	<property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
	<property name="testOnReturn" value="${redis.pool.testOnReturn}"/>
</bean>
<!-- JedisConnectionFactory -->
<bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
	<property name="hostName" value="${shop.redis.ip}"/>
	<property name="port" value="${shop.redis.port}"/>
	<property name="poolConfig" ref="jedisPoolConfig"/>
</bean>
<!-- redisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
	  p:connectionFactory-ref="JedisConnectionFactory">
	<property name="keySerializer">
		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
	</property>
	<property name="valueSerializer">
		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
	</property>
	<property name="hashKeySerializer">
		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
	</property>
	<property name="hashValueSerializer">
		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
	</property>
</bean>

<!-- spring cache 配置-->
<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"
	  c:redisOperations-ref="redisTemplate">
	<!-- 配置默认缓存5分钟,注意:原始默认为永不超时。 -->
	<property name="defaultExpiration" value="300"></property>
	<!-- cacheName 缓存超时配置,10分钟,半小时,一小时 -->
	<property name="expires">
		<map key-type="java.lang.String" value-type="java.lang.Long">
			<entry key="tenMinutesCache" value="600"/>
			<entry key="halfHourCache" value="1800"/>
			<entry key="oneHourCache" value="3600"/>
		</map>
	</property>
</bean>
<cache:annotation-driven cache-manager="cacheManager"/>

spring-cache的使用

/**
 * Created by chunmeng.lu
 * Date: 2016-03-09 13:22
 */
@Service
public class TestService {
	@Autowired
	private TestMapper testMapper;

	@Cacheable(value = "oneHourCache", key = "'findById'+#id")
	public List<CityAreaModel> findById(int id) {
		return testMapper.selectId(id);
	}
}

Spring cache注解

@Cacheable @CacheEvict @CachePut

@Cacheable(value="oneHourCache", key = "'findById'+#id")

这个注释的意思是,当调用这个方法的时候,会从一个名叫oneHourCache的缓存中查找对应key的缓存对象。

如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。

前面的#号代表这是一个SpEL表达式。

@CacheEvict(value="oneHourCache", key="'findById'+#id")

注释来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存。

其中的Key是用来指定缓存的key的。

@CachePut(value="oneHourCache", key="'findById'+#id")

应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓存。

Spring-cache官方文档

官方英文文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html

捐助共勉
版权声明:若无特殊注明,本文皆为原创,转载请保留文章出处。