Redis入门很简单之五【Jedis和Spring的整合】
在上一篇文章中,简单介绍了Jedis的连接池使用方式。
如果和Spring进行整合的话,我们将获得更好的简洁性、灵活性,显然是一种更加优雅(graceful)的方式。
[一]. 搭建环境:
1. 在之前版本的基础之上,添加如下的依赖:
spring.jar
commons-logging.jar
log4j-1.2.15.jar
同时添加日志配置文件:log4j.properties到classpath下面。
2. 配置Spring文件:applicationContext.xml
注意:连接池jedisPool的配置,这里使用了构造方式注入,这是和Jedis的API一致的;
在注入port时,需要使用使用type = "int"指定注入的参数类型,否则出现异常。
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <!-- 加载redis配置文件 -->
- <context:property-placeholder location="classpath:redis.properties"/>
- <!-- redis连接池的配置 -->
- <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
- <property name="maxActive" value="${redis.pool.maxActive}"/>
- <property name="maxIdle" value="${redis.pool.maxIdle}"/>
- <property name="minIdle" value="${redis.pool.minIdle}"/>
- <property name="maxWait" value="${redis.pool.maxWait}"/>
- <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
- <property name="testOnReturn" value="${redis.pool.testOnReturn}"/>
- </bean>
- <!-- redis的连接池pool,不是必选项:timeout/password -->
- <bean id = "jedisPool" class="redis.clients.jedis.JedisPool">
- <constructor-arg index="0" ref="jedisPoolConfig"/>
- <constructor-arg index="1" value="${redis.host}"/>
- <constructor-arg index="2" value="${redis.port}" type="int"/>
- <constructor-arg index="3" value="${redis.timeout}" type="int"/>
- <constructor-arg index="4" value="${redis.password}"/>
- </bean>
- </beans>
[二]. 从SPring容器中获取JedisPool:
- ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
- JedisPool pool = (JedisPool) context.getBean("jedisPool");
- Jedis jedis = pool.getResource();
- ...
- pool.returnResource(jedis);
[三]. 缓存JavaBean:
上一篇文章中,已经有了对Jedis使用的基本说明。
当然很多时候我们都希望Redis能够对JavaBean进行缓存,这需要借助于JDK提供的序列化技术。
1. 要求缓存实体实现了序列化Serializable接口:这里以Userinfo为例。
2. 序列化工具类:Jedis对序列化的支持,是提供了字节数组byte[]作为参数;
为此编写SerializingUtil工具类负责byte[]和JavaBean之间的相互转换。该方法的API如下所示:
- public static byte[] serialize(Object source);
- public static Object deserialize(byte[] source);
该工具类的具体实现:
- /**
- * 功能简述: 序列化工具类,负责byte[]和Object之间的相互转换.
- * @author Nick Xu
- * @version 1.0
- */
- public class SerializingUtil {
- private static Log logger = LogFactory.getLog(SerializingUtil.class);
- /**
- * 功能简述: 对实体Bean进行序列化操作.
- * @param source 待转换的实体
- * @return 转换之后的字节数组
- * @throws Exception
- */
- public static byte[] serialize(Object source) {
- ByteArrayOutputStream byteOut = null;
- ObjectOutputStream ObjOut = null;
- try {
- byteOut = new ByteArrayOutputStream();
- ObjOut = new ObjectOutputStream(byteOut);
- ObjOut.writeObject(source);
- ObjOut.flush();
- }
- catch (IOException e) {
- logger.error(source.getClass().getName()
- + " serialized error !", e);
- }
- finally {
- try {
- if (null != ObjOut) {
- ObjOut.close();
- }
- }
- catch (IOException e) {
- ObjOut = null;
- }
- }
- return byteOut.toByteArray();
- }
- /**
- * 功能简述: 将字节数组反序列化为实体Bean.
- * @param source 需要进行反序列化的字节数组
- * @return 反序列化后的实体Bean
- * @throws Exception
- */
- public static Object deserialize(byte[] source) {
- ObjectInputStream ObjIn = null;
- Object retVal = null;
- try {
- ByteArrayInputStream byteIn = new ByteArrayInputStream(source);
- ObjIn = new ObjectInputStream(byteIn);
- retVal = ObjIn.readObject();
- }
- catch (Exception e) {
- logger.error("deserialized error !", e);
- }
- finally {
- try {
- if(null != ObjIn) {
- ObjIn.close();
- }
- }
- catch (IOException e) {
- ObjIn = null;
- }
- }
- return retVal;
- }
- }
3. 对JavaBean的存储和获取:
定义实体:借助于Timestamp类,获取ms值。
- Userinfo actual = new Userinfo(140520, "Nick Xu",
- new Date(Timestamp.valueOf("1990-11-11 00:00:00").getTime()));
使用Jedis操作:key、value都需要转成byte[]字节数组。
- String key = "user.userid." + actual.getUserId();
- jedis.set(key.getBytes(), SerializingUtil.serialize(actual));
- Userinfo expected = (Userinfo) SerializingUtil.deserialize(jedis.get(key.getBytes()));
对象的比较:需要覆写equals和hashCode方法。
- assertEquals(expected, actual);
顶
踩


参考知识库
- Redis知识库4908 关注 | 738 收录
评论
嗯,是的,稍后会对Spring Data Redis进行介绍,使用起来确实方便 ,不过带来的却是Redis特性的大量丢失
,尤其是,不支持Sharding机制。
都丢失了什么,能例举一下吗?有文章吗?
嗯,是的,稍后会对Spring Data Redis进行介绍,使用起来确实方便 ,不过带来的却是Redis特性的大量丢失
,尤其是,不支持Sharding机制。
Redis入门很简单之五【Jedis和Spring的整合】的更多相关文章
- Redis入门很简单之七【使用Jedis实现客户端Sharding】
Redis入门很简单之七[使用Jedis实现客户端Sharding] 博客分类: NoSQL/Redis/MongoDB redisjedisspringsharding分片 <一>. 背 ...
- Redis入门很简单之六【Jedis常见操作】
Redis入门很简单之六[Jedis常见操作] http://www.tuicool.com/articles/vaqABb http://www.cnblogs.com/stephen-liu74/ ...
- Redis入门很简单之四【初识Jedis】
Redis入门很简单之四[初识Jedis] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存jedis 使用Jedis提供的Java API对Redis进行操作,是Red ...
- Redis入门很简单之一【简介与环境搭建】
Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件 [Redis简介] <一>. NoSQL ...
- Redis入门很简单之三【常见参数配置】
Redis入门很简单之三[常见参数配置] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存中间件memcached Redis的一下常见设置都是通过对redis.conf ...
- Redis入门很简单之二【常见操作命令】
Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存 Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...
- Redis入门和Java利用jedis操作redis
Redis入门和Java利用jedis操作redis Redis介绍 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - val ...
- 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)
1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...
- [电子书] 《Android编程入门很简单》
<Android编程入门很简单>是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书.本书避免出现云山雾罩.晦涩难懂的讲解,代之以轻松活泼.由浅入 ...
随机推荐
- Archive.org:互联网档案馆
Archive.org:互联网档案馆 2009年的最后一天,辞旧迎新,互联网也同样如此,在过往40年的基础上一步步积累发展.对于我们而言很希望通过以往的每个网页.见证和找寻历史,这就是今天所介绍的 ...
- git filter-branch
https://github.com/git-for-windows/git/issues/2206 https://git-scm.com/docs/git-filter-branch The -- ...
- printf ("%*.*s")
小数点.后“*”表示输出位数,具体的数据来自参数表printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“*”代替那个常量,然后在后面提供变量给“*”. 同样,小数点 ...
- Eclipse Luna安装Hibernate Tools 4.2.3不显示,设置Eclipse运行的JDK
Eclipse Luna安装Hibernate Tools 4.2.3不显示,设置Eclipse运行的JDK,有需要的朋友可以参考下. eclipse-jee-luna-SR2中安装Hibernate ...
- 《单词的减法》state1~state17(第二遍学习记录)
单词的减法(二) 2016.05.18.2016.05.21 state 1 advisory 顾问的,劝告的 anticipate/participate 期望/参加 state 2 applian ...
- spring boot 尚桂谷学习笔记08 Docker ---Web
------Docker------ 简介:Docker是一个开元的应用容器引擎,性能非常高 已经安装好的软件打包成一个镜像放到服务器中运行镜像 MySQL容器,Redis容器...... Docke ...
- 笔记大神推荐的个人知识文档管理工具mybase
铛铛铛,今天我要给大家推荐一款个人知识笔记管理神器,不出你们所料,它就是mybase. 那mybase究竟能干啥呢?借用mybase中文官网的一句话来说,mybase软件可以将电脑上的文档.知识.笔记 ...
- 实验报告(五)&第七周学习总结
实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. 掌握创建自定义包 ...
- Notepad++使用-如何导出/导入配置文件
复制 : %APPDATA%\Notepad++ 转载于:https://www.cnblogs.com/dmcs95/p/11278982.html
- java--二叉树解析及基本实现
一.二叉树的结构 在进行链表结构开发的过程之中,会发现所有的数据按照首尾相连的状态进行保存,那么 在进行数据查询时为了判断数据是否存在,这种情况下它所面对的时间复杂度就是"O(n)" ...