Configure Spring4.0 to annotate the use of Cache+Redis caching
- 2020-07-21 08:07:10
- OfStack
Preface:
Currently, Redis has been set up for the processing of the last technical architecture of the company project, but redis is only used for the management of session, while the object cache in the background is not used
1. Differences between redis and ehcache:
From the perspective of deployment, I think redis is more suitable for distributed deployment. ehcache is to create a block of memory for caching on each application server, and the case of caching should also be considered when clustering. redis does not need to consider caching and is deployed on a single server (or in a certain application server).
2. Project configuration (spring mvc+maven+mybaits+redis)
a. configure pom. xml file (download 2 jar if not maven administration project)
<!-- redis cache related.....start -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.6.0.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<!-- redis cache related.....end -->
b. Configure the ES38en.xml file
In the first < beans > cache cache is added to
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.2.xsd"
Load the redis configuration in Spring
<!-- ******************** redis The cache **********************-->
<!-- annotations 1 Must configure, otherwise will not work -->
<cache:annotation-driven />
<!-- jedis configuration -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.maxIdle}" />
<!--<property name="maxWaitMillis" value="${redis.maxWait}" />-->
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>
<!-- redis Server center -->
<bean id="connectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="poolConfig" ref="poolConfig" />
<property name="port" value="${redis.port}" />
<property name="hostName" value="${redis.hostname}" />
<!-- <property name="password" value="${redis.password}" /> -->
<property name="timeout" value="${redis.timeout}"></property>
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="keySerializer">
<bean
class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
</bean>
<!-- Configure the cache -->
<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
<constructor-arg ref="redisTemplate" />
</bean>
<!-- ******************** redis The cache **********************-->
c. Configure application. properties resource file
#redis config
#redis.hostname=192.168.242.131
redis.hostname=localhost
redis.port=6379
redis.timeout=2000
redis.usePool=true
redis.default.db=0
#\u6700\u5927\u5206\u914D\u7684\u5BF9\u8C61\u6570
redis.maxTotal=600
#\u6700\u5927\u80FD\u591F\u4FDD\u6301idel\u72B6\u6001\u7684\u5BF9\u8C61\u6570
redis.maxIdle=300
#\u591A\u957F\u65F6\u95F4\u68C0\u67E5\u4E00\u6B21\u8FDE\u63A5\u6C60\u4E2D\u7A7A\u95F2\u7684\u8FDE\u63A5
redis.timeBetweenEvictionRunsMillis=30000
#\u7A7A\u95F2\u8FDE\u63A5\u591A\u957F\u65F6\u95F4\u540E\u4F1A\u88AB\u6536\u56DE
redis.minEvictableIdleTimeMillis=30000
#\u5F53\u8C03\u7528borrow Object\u65B9\u6CD5\u65F6\uFF0C\u662F\u5426\u8FDB\u884C\u6709\u6548\u6027\u68C0\u67E5
redis.testOnBorrow=true
########reids\u7F16\u7801\u683C\u5F0F
redis.encode=utf-8
######\u7F13\u5B58\u8FC7\u671F\u65F6\u95F4 \u79D2 1000*60*60*24*7 \u4E03\u5929
redis.expire=604800000
####\u662F\u5426\u5F00\u542FRedis\u670D\u52A1\u5E94\u7528
redis.unlock=false
3. The test
@Service("testService")
public class TestServiceImpl implements ITestService {
@Resource
private ITestDao testDao;
@Cacheable(value="testId",key="'id_'+#id")
public Test getTestById(int id) {
return this.testDao.getObjById(id);
}
@CacheEvict(value="testId",key="'id_'+#id")
public void removeTestById(int id) {
}
}
Results:
Enter Service method for the first time
The second time without entering the service method, the value is also obtained
Note: Some friends may ask, when starting access, it is wrong, that is because the local redis service is not started, download win32/win64 version, boot access will not report an error