Spring集成Redis方案(spring-data-redis)(基于Jedis的单机模式)(待实践)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点。并且会与一些低版本的Spring有冲突,要看官方文档和不断的测试。
继上一篇文章http://www.cnblogs.com/EasonJim/p/7625738.html中提到的几款客户端,它们基本都能和Spring集成。
下面介绍的是基于Spring原生的spring-data-redis去集成。
还要注意的是,Spring整合了Jedis框架进去,所以下面配置上还会基于Jedis去实现的,但是Spring在上层已经集成了很好用的工具类。
而整个框架基于Spring Data,里面集成了主流的应用,比如Redis,MongoDB等,而基于这些应用的一些非常好用的框架也集成了,比如Jedis这些。
我猜测,基于Spring Data Redis去集成的,底层还是用Jedis去实现,应该是可以实现客户端集群的,下次我再实践详细分析一下。
Spring Data Redis
项目结构:
POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.x.redis</groupId><artifactId>Spring_redis</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>Spring_redis</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.1</version></dependency><!-- 将现有的jakarta commons logging的调用转换成lsf4j的调用。 --><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.6.1</version></dependency><!-- Hack:确保commons-logging的jar包不被引入,否则将和jcl-over-slf4j冲突 --><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version><scope>provided</scope></dependency><!-- slf4j的实现:logback,用来取代log4j。更快、更强! --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>0.9.24</version><scope>runtime</scope></dependency></dependencies> </project>
applicationContext.xml:
context:property-placeholder标签用来导入properties文件。从而替换${redis.maxIdle}这样的变量。
context:component-scan是为了在com.x.redis.dao报下的类能够实用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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:property-placeholder location="classpath:redis.properties" /> <context:component-scan base-package="com.x.redis.dao"></context:component-scan><bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="maxActive" value="${redis.maxActive}" /> <property name="maxWait" value="${redis.maxWait}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> </bean> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="connectionFactory" /> </bean> <bean id="userDAO" class="com.x.redis.dao.impl.UserDAOImpl" /> </beans>
redis.properties:
# Redis settings #redis.host=192.168.20.101 #redis.port=6380 #redis.pass=foobared redis.host=127.0.0.1 redis.port=6379 redis.pass=redis.maxIdle=300 redis.maxActive=600 redis.maxWait=1000 redis.testOnBorrow=true
UserDAOImpl:
Spring对DAO层的封装很多用了类似于下面代码的模板方式。
RedisTemplate就是Spring对Redis的一个封装。
public class UserDAOImpl implements UserDAO {@Autowiredprotected RedisTemplate<Serializable, Serializable> redisTemplate;public void saveUser(final User user) {redisTemplate.execute(new RedisCallback<Object>() {@Overridepublic Object doInRedis(RedisConnection connection) throws DataAccessException {connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()),redisTemplate.getStringSerializer().serialize(user.getName()));return null;}});}@Overridepublic User getUser(final long id) {return redisTemplate.execute(new RedisCallback<User>() {@Overridepublic User doInRedis(RedisConnection connection) throws DataAccessException {byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id);if (connection.exists(key)) {byte[] value = connection.get(key);String name = redisTemplate.getStringSerializer().deserialize(value);User user = new User();user.setName(name);user.setId(id);return user;}return null;}});}}
User:
public class User {private long id;private String name;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;} }
测试代码:
public static void main(String[] args) {ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");UserDAO userDAO = (UserDAO)ac.getBean("userDAO");User user1 = new User();user1.setId(1);user1.setName("obama");userDAO.saveUser(user1);User user2 = userDAO.getUser(1);System.out.println(user2.getName()); }
参考:
http://www.cnblogs.com/tankaixiong/p/3660075.html(以上内容转自此篇文章)
http://blog.csdn.net/defonds/article/details/48716161
http://blog.csdn.net/albertfly/article/details/51494080
http://www.cnblogs.com/mrlinfeng/p/5857775.html
http://blog.csdn.net/fighterandknight/article/details/53432276/
http://www.cnblogs.com/cuglkb/p/6862609.html
http://snowolf.iteye.com/blog/1666908
http://www.cnblogs.com/wuxinliulei/p/5216712.html
http://blog.csdn.net/tomcat_2014/article/details/55260306
https://my.oschina.net/u/866380/blog/521658
http://blog.csdn.net/u013725455/article/details/52129283
http://blog.sina.com.cn/s/blog_630d50dc0102wwmi.html
Spring集成Redis方案(spring-data-redis)(基于Jedis的单机模式)(待实践)相关推荐
- spring集成mq_使用Spring Integration Java DSL与Rabbit MQ集成
spring集成mq 我最近参加了在拉斯维加斯举行的2016年Spring大会 ,很幸运地看到了我在软件世界中长期敬佩的一些人. 我亲自遇到了其中的两个人,他们实际上合并了几年前我与Spring In ...
- SCA与spring集成(在spring中开发SOA)
客户端调用与Tuscany SCA相同 服务端的配置如下: sca.composite <?xml version="1.0" encoding="UTF-8&qu ...
- 通过Spring集成进行消息处理
Spring Integration提供了Spring框架的扩展,以支持著名的企业集成模式. 它在基于Spring的应用程序中启用轻量级消息传递,并支持与外部系统的集成. Spring Integra ...
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
在项目中,一般我们会把服务层(service)的一些查询结果和一些数据进行缓存.缓存的种类有很多.这里进行redis作为缓存框架,进行一个缓存的配置.配置前需要先了解一些基本的知识 在Spring中缓 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part7(Redis常见使用(部署)方式:单机模式、主从模式、哨兵模式、集群模式)~整起
Redis持久化:RDB.AOF是针对存储在一台服务器上的数据由于存储过程被打断而发生丢失的情况的.此时,咱们肯定要考虑到,所有鸡蛋都放在一个篮子里是会出问题的. 如果服务器发生了宕机,由于数据恢复是 ...
- Redis高可用架构 (redis主从+sentinel)
cat >> /etc/sysctl.conf< cat >>/etc/security/limits.conf<<EOF soft nproc 65535 ...
- Spring Data Redis入门示例:基于RedisTemplate (三)
使用底层API:RedisConnection操作Redis,需要对数据进行手动转换(String <---->byte),需要进行多数重复性工作,效率低下:org.springframe ...
- 使用Spring Data Redis操作Redis(集群版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- Redis Spring集成
近来Spring可谓是火了一把,那麽我们应该进行Redis缓存和Spring集成的呢?? 下面我们将讲解Spring对Redis的支持即我们如何在Spring项目中访问Redis. 项目如下 redi ...
最新文章
- Oracle之物化视图
- ISO 5 Lecture for Micro-Macro Interactions
- sql中使用“where 1=1 and ....“ 到底影响效率吗,回答不会也永远不会
- 微型计算机最早出现在第三代计算机中,微型计算机最早出现在第三代计算机中。...
- 如何打印CloudFoundry上应用运行时的环境变量
- stringstream实例
- Poj 1503 Integer Inquiry
- 为什么Linux与众不同?
- 自定义Exception异常
- bzoj 3670 [NOI2014]动物园
- 创建标签等操作DOM的原生js API
- Python贴吧爬虫
- 三重视角看陈彤:一个网媒老兵的谢幕
- 第八章 VAR模型与脉冲响应
- Vue——watch选项详解
- html5 app 打包,手机h5网站如何快速打包做成APP?
- gui学生信息管理系统java,Java实训·GUI学生信息管理系统
- html_label标签
- 在html使用wow,让你的网页有点动画效果
- aardio - 写注册表改鼠标右键Kate菜单项信息
热门文章
- C++中Reference与指针(Pointer)的使用对比
- DevOps:怎么实现源代码注释和系统文档的自动化更新?
- 《javascript语言精粹》读书笔记(一)
- Symantec BE 12.5 备份Exchange错误排除
- 【中文】Joomla1.7扩展介绍之Googlemaps Plugin
- 今年央视的春晚能给人带来惊喜吗?
- cinder存储服务
- kubernetes学习笔记之十三:基于calico的网络策略入门
- 折叠屏就要来了,适配逼死 Android 开发?
- 企业域名更换操作系列1:为什么要进行域名更换及更换需要注意事项