配置Spring4.0注解Cache+Redis缓存的用法
程序员文章站
2024-02-29 22:04:52
前言:
目前公司项目在上一个技术架构的处理,已经搭建好了redis,但redis只用在了做session的管理,然而 后台的对象缓存没有用上
1. redis 和...
前言:
目前公司项目在上一个技术架构的处理,已经搭建好了redis,但redis只用在了做session的管理,然而 后台的对象缓存没有用上
1. redis 和 ehcache的区别:
简单了解了下,个人觉得 从部署上而言,redis更适合分布式部署,ehcache是在每台应用服务器上开辟一块内存做缓存,集群时还得考虑缓存的情况, redis就不需要考虑缓存了、单独部署在一台服务器中(也可以是在某一台应用服务器中)
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服务器中心 --> <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) { } }
结果:
第一次 进入service方法
第二次 不进入service方法 也得到了值
注: 有朋友会问,启动访问时保错, 那是因为本地未启动redis服务, 下载win32/win64版的,启动 再访问就不会报错
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。