Home > Java > javaTutorial > body text

Share a usage example of configuring Spring 4.0 annotation Cache+Redis cache

Y2J
Release: 2017-05-02 14:08:28
Original
1895 people have browsed it

This article mainly introduces the detailed configuration of Spring4.0 annotation Cache+Redis cache usage, which has certain reference value. Interested friends can refer to it

Foreword:

Currently, the company's project has built Redis in the previous technical architecture, but redis is only used for session management, but the background object cache is not used

1. The difference between redis and ehcache:

After a brief understanding, I personally feel that from a deployment perspective, redis is more suitable for distributed deployment, while ehcache is installed on each Open a piece of memory on the application server for caching. When clustering, you have to consider caching. Redis does not need to consider caching. It can be deployed in a separate server (or in an application server)

2. Project configuration (spring mvc+maven+mybaits+redis), here we only talk about Spring integrated redis:

a. Configure pom.xml file (if it is not a maven management project, download 2 jars That’s it)

<!-- 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 -->
Copy after login

b. Configure the applicationContext.xml file

First add the cache cache 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"
Copy after login

Load the redis configuration in Spring

<!-- ******************** redis缓存  **********************--> 
<!-- 注解一定要配置,不然不起作用 --> 
<cache:annotation-driven /> 
 
<!-- jedis 配置 --> 
  <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服务器中心 --> 
  <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> 
  <!-- 配置缓存 --> 
  <bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> 
    <constructor-arg ref="redisTemplate" /> 
  </bean> 
   
<!-- ******************** redis缓存  **********************-->
Copy after login

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
Copy after login

3. Test

@Service("testService") 
public class TestServiceImpl implements ITestService { 
   
  @Resource 
  private ITestDao testDao; 
 
  @Cacheable(value="testId",key="&#39;id_&#39;+#id") 
  public Test getTestById(int id) { 
    return this.testDao.getObjById(id); 
  } 
   
  @CacheEvict(value="testId",key="&#39;id_&#39;+#id") 
  public void removeTestById(int id) { 
     
  } 
}
Copy after login

Result:

Enter the Service method for the first time

The value is obtained even if the service method is not entered for the second time

Note: Some friends will ask, error-proofing when starting access. That is because the redis service is not started locally. Download the win32/win64 version Yes, no error will be reported after starting and accessing again

The above is the detailed content of Share a usage example of configuring Spring 4.0 annotation Cache+Redis cache. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!