配置Spring4.0注解Cache+Redis緩存的用法
前言:
目前公司項目在上一個技術(shù)架構(gòu)的處理,已經(jīng)搭建好了Redis,但redis只用在了做session的管理,然而 后臺的對象緩存沒有用上
1. redis 和 ehcache的區(qū)別:
簡單了解了下,個人覺得 從部署上而言,redis更適合分布式部署,ehcache是在每臺應(yīng)用服務(wù)器上開辟一塊內(nèi)存做緩存,集群時還得考慮緩存的情況, redis就不需要考慮緩存了、單獨部署在一臺服務(wù)器中(也可以是在某一臺應(yīng)用服務(wù)器中)
2. 項目配置(spring mvc+maven+mybaits+redis),這里只講Spring 集成 redis:
a. 配置 pom.xml 文件 (若不是maven管理項目,下載2個jar 即可 )
<!-- 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.配置 applicationContext.xml文件
先在<beans>中加入 cache緩存
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"
在Spring加載redis配置
<!-- ******************** 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服務(wù)器中心 -->
<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緩存 **********************-->
c.配置 application.properties 資源文件
#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. 測試
@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) {
}
}
結(jié)果:
第一次 進入Service方法
第二次 不進入service方法 也得到了值
注: 有朋友會問,啟動訪問時保錯, 那是因為本地未啟動redis服務(wù), 下載win32/win64版的,啟動 再訪問就不會報錯
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java模擬rank/over函數(shù)實現(xiàn)獲取分組排名的方法詳解
這篇文章主要為大家詳細介紹了Java模擬rank()、over()函數(shù)獲取分組排名的方法設(shè)計及實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-04-04
Hadoop運行時遇到j(luò)ava.io.FileNotFoundException錯誤的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Hadoop運行時遇到j(luò)ava.io.FileNotFoundException錯誤展開,文中有非常詳細的解決方法,需要的朋友可以參考下2021-06-06
SpringBoot測試之@SpringBootTest與MockMvc的實戰(zhàn)應(yīng)用小結(jié)
本文將深入探討SpringBoot測試中兩個核心工具:@SpringBootTest注解與MockMvc測試框架的實戰(zhàn)應(yīng)用,幫助開發(fā)者構(gòu)建更穩(wěn)健的測試體系,提高代碼質(zhì)量與可維護性,感興趣的朋友一起看看吧2025-03-03
SpringBoot+Netty+WebSocket實現(xiàn)消息發(fā)送的示例代碼
這篇文章主要介紹了SpringBoot+Netty+WebSocket實現(xiàn)消息發(fā)送的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
spring AOP實現(xiàn)@Around輸出請求參數(shù)和返回參數(shù)
這篇文章主要介紹了spring AOP實現(xiàn)@Around輸出請求參數(shù)和返回參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
springboot配置請求超時時間(Http會話和接口訪問)
本文主要介紹了springboot配置請求超時時間,包含Http會話和接口訪問兩種,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07

