Spring Data+Redis缓存实现
2016-09-21 21:33
92 查看
一、所需jar包
spring-data-redis-1.7.2.RELEASE.jar
commons-pool2-2.4.2.jar
commons-logging-1.2.jar
jedis-2.8.2.jar
aopalliance-1.0.jar以及spring相关包
二、spring data连接redis
(1)创建Redis连接工厂
JedisConnectionFactory LettuceConnectionFactory
JredisConnectionFactory 和 SrpConnectionFactory已过时。
默认使用JedisConnectionFactory。
(2)创建Redis模版
RedisTemplate:极大简化了Redis的数据访问,能够让我们持久化各种类型的key和value
StringRedisTemplate:扩展了RedisTemplate,只关注String类型
(3)Redis存储序列化
Redis存储时,key和value都会使用Redis的序列化器进行序列化。RedisTemplate会使用JdkSerializationRedisSerializer。StringRedisTemplate默认会使用StringRedisSerializer
当使用RedisTemplate,我们希望将Value序列化为JSON,而key是String类型时,通过keySerializer和valueSerializer改变序列化方式。如:
Spring Data Redis提供多个序列化器:
GenericToStringSerializer:使用spring转换服务进行序列化。
JacksonJsonRedisSerializer:使用Jackson1,将对象序列化为JSON。
Jackson2JsonRedisSerializer:使用Jackson2,将对象序列化为JSON。
JdkSerializationRedisSerializer:使用Java序列化
OxmSerializer:使用Spring O/X映射的编排器和解排器实现序列化,用于XML序列化。
StringRedisSerializer:序列化String类型的key和value
三、示例
spring配置文件:
启动Redis后运行测试类,结果:
spring-data-redis-1.7.2.RELEASE.jar
commons-pool2-2.4.2.jar
commons-logging-1.2.jar
jedis-2.8.2.jar
aopalliance-1.0.jar以及spring相关包
二、spring data连接redis
(1)创建Redis连接工厂
JedisConnectionFactory LettuceConnectionFactory
JredisConnectionFactory 和 SrpConnectionFactory已过时。
默认使用JedisConnectionFactory。
(2)创建Redis模版
RedisTemplate:极大简化了Redis的数据访问,能够让我们持久化各种类型的key和value
StringRedisTemplate:扩展了RedisTemplate,只关注String类型
(3)Redis存储序列化
Redis存储时,key和value都会使用Redis的序列化器进行序列化。RedisTemplate会使用JdkSerializationRedisSerializer。StringRedisTemplate默认会使用StringRedisSerializer
当使用RedisTemplate,我们希望将Value序列化为JSON,而key是String类型时,通过keySerializer和valueSerializer改变序列化方式。如:
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> <property name="keySerializer" > <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> </property> <property name="valueSerializer" > <bean class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer"/> </property> </bean>
Spring Data Redis提供多个序列化器:
GenericToStringSerializer:使用spring转换服务进行序列化。
JacksonJsonRedisSerializer:使用Jackson1,将对象序列化为JSON。
Jackson2JsonRedisSerializer:使用Jackson2,将对象序列化为JSON。
JdkSerializationRedisSerializer:使用Java序列化
OxmSerializer:使用Spring O/X映射的编排器和解排器实现序列化,用于XML序列化。
StringRedisSerializer:序列化String类型的key和value
三、示例
spring配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> <context:component-scan base-package="com.learn" /> <!-- 开启缓存 --> <cache:annotation-driven/> <!-- redis连接池 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="6"></property> <property name="minEvictableIdleTimeMillis" value="300000"></property> <property name="numTestsPerEvictionRun" value="3"></property> <property name="timeBetweenEvictionRunsMillis" value="60000"></property> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="127.0.0.1" /> <property name="port" value="6379" /> <property name="poolConfig" ref="jedisPoolConfig"></property> <property name="timeout" value="2000"></property> <property name="usePool" value="true"></property> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> <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 name="redisOperations" ref="redisTemplate" /> </bean> </beans>java类:
package com.learn.cache; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service("helloService") public class HelloService { @Cacheable(value="messageCache" ,key="#name") public String getMessage(String name) { System.out.println("HELLO:" + name); return "hello:" + name +"!"; } }测试类:
package com.learn.cache; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml"); HelloService helloService = (HelloService)ctx.getBean("helloService"); System.out.println(helloService.getMessage("josh")); System.out.println("调用缓存,未调用方法--------------"); System.out.println(helloService.getMessage("josh")); System.out.println(); System.out.println(helloService.getMessage("josha")); System.out.println("调用缓存,未调用方法--------------"); System.out.println(helloService.getMessage("josha")); } }
启动Redis后运行测试类,结果:
HELLO:josh hello:josh! 调用缓存,未调用方法-------------- hello:josh! HELLO:josha hello:josha! 调用缓存,未调用方法-------------- hello:josha!
相关文章推荐
- 如何实现win9X进程间数据通讯技术
- 用canvas实现红心飘飘的动画效果
- 利用Hook技术实现键盘监控
- 用Delphi实现远程屏幕抓取
- 如何利用C++ Builder 4.0 Enterprise实现对Excel97 的调用
- 应用程序敏感键的实现
- 在PB中快速实现数据库树形结构
- 在PowerBuilder中实现菜单条级权限的设置
- PB7.0中实现Jaguar GTS组件开发
- 如何实现数据的自动录入
- PowerBuilder中实现数据窗口打印预览通用方法
- 用Delphi实现远程屏幕抓取
- 用CTI实现与Web交谈
- WebClass实现动态WEB编程之理论篇
- WebClass实现动态WEB编程之实践篇
- 实现类似IE的打印网页功能
- 用DELPHI实现特色按钮
- 串行通信的基本原理及用MFC实现串口通信编程
- 如何在应用程序中实现关机功能
- 用Delphi在工业控制和自动化实现多线程进行数据采集