NoSQLRedis入门很简短的五【Jedis和Spring的三结合】

Redis入门很简短的五【Jedis和Spring的构成】

博客分类:

redisnosql缓存jedisspring 

以达成同样篇稿子中,简单介绍了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”指定注入的参数类型,否则出现分外。

Xml代码  NoSQL 1

  1. <beans xmlns=”http://www.springframework.org/schema/beans”  
  2.       xmlns:context=”http://www.springframework.org/schema/context”  
  3.       xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”  
  4.       xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  5.              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt;  
  6.     
  7.       <!– 加载redis配置文件 –>  
  8.       <context:property-placeholder location=”classpath:redis.properties”/>  
  9.         
  10.       <!– redis连接池的安排 –>  
  11.       <bean id=”jedisPoolConfig” class=”redis.clients.jedis.JedisPoolConfig”>  
  12.           <property name=”maxActive” value=”${redis.pool.maxActive}”/>  
  13.           <property name=”maxIdle” value=”${redis.pool.maxIdle}”/>  
  14.           <property name=”minIdle” value=”${redis.pool.minIdle}”/>  
  15.           <property name=”maxWait” value=”${redis.pool.maxWait}”/>  
  16.           <property name=”testOnBorrow” value=”${redis.pool.testOnBorrow}”/>  
  17.           <property name=”testOnReturn” value=”${redis.pool.testOnReturn}”/>  
  18.       </bean>  
  19.         
  20.       <!– redis的连接池pool,不是必选项:timeout/password  –>  
  21.       <bean id = “jedisPool” class=”redis.clients.jedis.JedisPool”>  
  22.           <constructor-arg index=”0″ ref=”jedisPoolConfig”/>  
  23.           <constructor-arg index=”1″ value=”${redis.host}”/>  
  24.           <constructor-arg index=”2″ value=”${redis.port}” type=”int”/>  
  25.           <constructor-arg index=”3″ value=”${redis.timeout}” type=”int”/>  
  26.           <constructor-arg index=”4″ value=”${redis.password}”/>  
  27.       </bean>  
  28.         
  29.   </beans>  

 

[二]. 从SPring容器中落JedisPool:

Java代码  NoSQL 2

  1. ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);  
  2. JedisPool pool = (JedisPool) context.getBean(“jedisPool”);  
  3. Jedis jedis = pool.getResource();  
  4.  …  
  5. pool.returnResource(jedis);  

 

[三]. 缓存JavaBean:
 上同篇稿子中,已经闹矣针对性Jedis使用的为主阐明。 

 
当然多早晚我们且指望Redis可以对JavaBean举办缓存,这得依靠JDK提供的体系化技术。
   1. 求缓存实体实现了体系化Serializable接口:这里坐Userinfo为条例。
   2.
行列化工具类:Jedis对体系化的扶助,是供了配节数组byte[]作参数;
  也之编制SerializingUtil工具类负责byte[]和JavaBean之间的互动转换。该法的API如下所示:

Java代码  NoSQL 3

  1. public static byte[] serialize(Object source);   
  2. public static Object deserialize(byte[] source);  

   该工具类的切实可行实现:

Java代码  NoSQL 4

  1. /** 
  2.  * 效能简述: 体系化工具类,负责byte[]和Object之间的相转换. 
  3.  * @author Nick Xu 
  4.  * @version 1.0 
  5.  */  
  6. public class SerializingUtil {  
  7.       
  8.     private static Log logger = LogFactory.getLog(SerializingUtil.class);  
  9.       
  10.     /** 
  11.      * 效用简述: 对实体Bean进行体系化操作. 
  12.      * @param source 待转换的实体 
  13.      * @return 转换后的字节数组 
  14.      * @throws Exception 
  15.      */  
  16.     public static byte[] serialize(Object source) {  
  17.         ByteArrayOutputStream byteOut = null;  
  18.         ObjectOutputStream ObjOut = null;  
  19.         try {  
  20.             byteOut = new ByteArrayOutputStream();  
  21.             ObjOut = new ObjectOutputStream(byteOut);  
  22.             ObjOut.writeObject(source);  
  23.             ObjOut.flush();  
  24.         }  
  25.         catch (IOException e) {  
  26.             logger.error(source.getClass().getName()  
  27.                 + ” serialized error !”, e);  
  28.         }  
  29.         finally {  
  30.             try {  
  31.                 if (null != ObjOut) {  
  32.                     ObjOut.close();  
  33.                 }  
  34.             }  
  35.             catch (IOException e) {  
  36.                 ObjOut = null;  
  37.             }  
  38.         }  
  39.         return byteOut.toByteArray();  
  40.     }  
  41.       
  42.     /** 
  43.      * 效能简述: 将字节数组反体系化为实体Bean. 
  44.      * @param source 需要进行反系列化的字节数组 
  45.      * @return 反体系化后底实业Bean 
  46.      * @throws Exception 
  47.      */  
  48.     public static Object deserialize(byte[] source) {  
  49.         ObjectInputStream ObjIn = null;  
  50.         Object retVal = null;  
  51.         try {  
  52.             ByteArrayInputStream byteIn = new ByteArrayInputStream(source);  
  53.             ObjIn = new ObjectInputStream(byteIn);  
  54.             retVal = ObjIn.readObject();  
  55.         }  
  56.         catch (Exception e) {  
  57.             logger.error(“deserialized error  !”, e);  
  58.         }  
  59.         finally {  
  60.             try {  
  61.                 if(null != ObjIn) {  
  62.                     ObjIn.close();  
  63.                 }  
  64.             }  
  65.             catch (IOException e) {  
  66.                 ObjIn = null;  
  67.             }  
  68.         }  
  69.         return retVal;  
  70.     }  
  71. }  

 3. 对JavaBean的囤积和拿到:
        定义实体:借助于提姆estamp类,获取ms值。

Java代码  NoSQL 5

  1. Userinfo actual = new Userinfo(140520, “Nick Xu”,   
  2. new Date(Timestamp.valueOf(“1990-11-11 00:00:00”).getTime()));  

      使用Jedis操作:key、value都要转成byte[]字节数组。

Java代码  NoSQL 6

  1. String key = “user.userid.” + actual.getUserId();  
  2. jedis.set(key.getBytes(), SerializingUtil.serialize(actual));  
  3. Userinfo expected = (Userinfo) SerializingUtil.deserialize(jedis.get(key.getBytes()));  

        对象的于:需要覆写equals和hashCode方法。   

Java代码  NoSQL 7

  1. assertEquals(expected, actual);  

0 

0 

分享到: NoSQL 8 NoSQL 9

Redis入门很简短的六【Jedis常见操作】 Redis入门很简单的四【初识Jedis】

参照知识库

NoSQL 10

Redis知识库4908  关注 | 738  收录

评论

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举行介绍,使用起来的确有益NoSQL 11 ,然而带来的却是Redis特性的恢宏不翼而飞NoSQL 12 ,尤其是,不支持Sharding机制。

且丢掉了什么,能例举一下为?有篇为?

2 楼 Hello_Nick_Xu 2014-06-08  

yixiandave 写道

Spring不是爆发一个Spring-data-redis的连串也??

嗯,是的,稍后会对Spring Data
Redis举行介绍,使用起来实在有利于NoSQL 13 ,但是带来的倒是Redis特性的大量丢掉NoSQL 14 ,尤其是,不支持Sharding机制。 

网站地图xml地图