`

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);
0
0
分享到:
评论
5 楼 di1984HIT 2017-02-02  
慢慢会完善很多。罗马不是一日建成
4 楼 alafqq 2016-05-20  
希望楼主提供完整的代码~~哈哈jredis.properties
3 楼 19774279 2015-07-31  
Hello_Nick_Xu 写道
yixiandave 写道
Spring不是有一个Spring-data-redis的项目吗??

嗯,是的,稍后会对Spring Data Redis进行介绍,使用起来确实方便 ,不过带来的却是Redis特性的大量丢失 ,尤其是,不支持Sharding机制。

都丢失了什么,能例举一下吗?有文章吗?
2 楼 Hello_Nick_Xu 2014-06-08  
yixiandave 写道
Spring不是有一个Spring-data-redis的项目吗??

嗯,是的,稍后会对Spring Data Redis进行介绍,使用起来确实方便 ,不过带来的却是Redis特性的大量丢失 ,尤其是,不支持Sharding机制。







1 楼 yixiandave 2014-06-08  
Spring不是有一个Spring-data-redis的项目吗??

相关推荐

    spring整合redis案例(jedis)

    在本案例中,我们将深入探讨如何在Spring框架中整合Redis数据存储系统,使用Jedis作为客户端库。Redis是一个高性能的键值对存储系统,适用于缓存、消息队列等多种应用场景。而Spring是Java领域广泛使用的应用程序...

    各种版本的redis+Jedis驱动包

    在这个压缩包中,包含了不同平台下的Redis安装包,以及Jedis驱动,这使得在Windows和Linux环境下都能轻松地使用Redis。 首先,让我们详细了解Redis的不同版本: 1. **Redis Windows 32位与64位安装包**:Redis原本...

    Spring mvc整合redis实例(redis连接池)

    在Maven项目中,可以在pom.xml文件中添加`spring-data-redis`和`jedis`库,这两个库分别提供了Spring对Redis的支持和Jedis,一个Java客户端连接Redis。 ```xml &lt;groupId&gt;org.springframework.data &lt;artifactId&gt;...

    redis3.0widows集群+spring整合jedis

    redis3.0 widows集群 spring整合jedis redis搭建window集群代码和文档rubygems-2.5.1和rubyinstaller-2.2.3-x64软件下载

    redis相关jar包(redis2.1.5、jedis2.9.0)

    总的来说,`spring-data-redis-2.1.5.RELEASE.jar`和`jedis-2.9.1.jar`这两个jar包是Java开发者在使用Redis时的重要依赖。Spring Data Redis提供了一套完整的框架,使得我们可以轻松地在Spring应用中集成Redis,而...

    redis+spring jedis方式

    在Spring中集成Redis,有多种方式,包括Jedis和Lettuce客户端。Jedis是一个轻量级的Redis客户端,而Spring Data Redis则提供了更高层次的抽象,使得开发者能够更方便地操作Redis,无需直接处理低级别的Jedis API。 ...

    spring-data + jedis + redis代码

    1. 添加Jedis和Spring Data Redis依赖到项目构建文件(如pom.xml或build.gradle)。 2. 配置Redis连接信息,如主机名、端口、密码等,在Spring的配置文件(如application.yml或application.properties)中。 3. 创建...

    jedis2.8 与 spring3.2 整合

    总的来说,理解并掌握Redis集群部署和Jedis与Spring的整合,对于提升系统的性能和稳定性至关重要。通过实践和学习,开发者可以更好地应对高并发、大数据量的场景,为应用程序提供高效的数据存储和访问能力。

    spring boot redis-jedis

    总结来说,Spring Boot结合Jedis提供了一种简单、高效的方式去集成和操作Redis。通过配置和bean的创建,我们可以轻松地在Java代码中使用Jedis进行各种数据操作,包括键值对、集合、列表等数据结构,以及事务处理。...

    SpringMVC整合Redis集群

    项目由maven构建,使用springMVC整合了Redis的集群,发布到tomcat中,访问http://localhost:8080/SpringRedisCluster/redis/hello.do测试即可,前提是配好了redis的集群。

    redis和spring整合

    Redis是一款高性能的键值对数据库,常用于缓存和消息中间件,而Spring框架是Java领域最常用的轻量级框架之一。将Redis与Spring整合,可以充分利用Redis的高速存储优势,提升应用程序的性能。本文将深入探讨如何进行...

    Spring Data Redis

    Spring Data Redis 纯英文文档,介绍spring操作redis的一些用法

    spring_redis集成(jedis java客户端)

    spring_redis集成,通过jedis作为redis的客户端。 只提供集成方式,具体api,参照jedis API

    redis3.2.1+jedis2.8.0+jedis.api.rar一站下载

    2. 集群支持:Redis 3.0引入了官方的集群解决方案,3.2.1版本对此进行了优化,使得集群的搭建和管理更为简单。 3. LRU(Least Recently Used)算法的改进:在内存不足时,Redis会根据LRU策略淘汰数据,3.2.1版本对此...

    redis实现分布式锁(java/jedis)

    redis实现分布式锁(java/jedis),其中包含工具方法以及使用demo 本资源是利用java的jedis实现 redis实现分布式锁(java/jedis),其中包含工具方法以及使用demo 本资源是利用java的jedis实现

    spring整合redis项目

    Spring整合Redis项目是一种常见的数据存储和缓存解决方案,特别是在高并发、大数据量的Web应用中。Redis是一款开源的、高性能的键值对数据库,而Spring是Java领域广泛使用的框架,提供了一整套的企业级应用开发工具...

    SpringCloud整合Redis

    SpringCloud整合Redis缓存;版本:SpringCloud :Dalston.SR4;SpringBoot:1.5.14.RELEASE;Redis:3.2.0;Maven :3.5.3.代码下载下来即可用

    Spring3.0整合redis相关jar

    2. `spring-data-redis.jar`: Spring Data Redis是Spring框架的一部分,它为Redis提供了Spring的模板和Repository支持,使得与Redis的交互更加简单和直观。 3. `lettuce.jar` (可选): Lettuce是另一个Redis客户端,...

    java连接redis/jedis连接池/jedis相关工具/jedis对象存取

    Java连接Redis是现代Web开发中常见的一种数据存储和交互方式,Redis作为一个高性能的键值数据库,因其快速响应和丰富的数据结构支持,常被用于缓存、消息队列等场景。Jedis是Java语言中广泛使用的Redis客户端库,它...

    Redis 、Redis 连接池、JedisPool

    1.全网最强最好用redis 封装连接池,redis 配置详解 2.jar 内置最全 最安全的两种redis 连接池 创建方式(synchronized and look), 3.通过了自己公司生产环境的检测 4.使用方法:只需要将jar 放入项目 lib 下面 ...

Global site tag (gtag.js) - Google Analytics