Redis资料汇总(十) java client

redis主页上列出的java 客户端JDBC-Redis JRedis Jedis三种,下面分别介绍三种客户端的优缺点及其他相关的工具.

 

支持redis版本 性能 维护 推荐
JDBC-Redis   not good    
JRedis 1.2.n release
2.0.0 尚未release版本
fast    
Jedis 2.0.0 release fast actively developed 推荐

JDBC-Redis

JDBC-Redis is just a JDBC wrapper for JRedis database.
If you plan on using your code with different back-ends then JDBC is a good way to go. NOTE: It is not a complete JDBC implementation and the NOSQL will bleed through.

If you are going to stay with Redis then I would suggest using the API, which will give you more flexibility. Use a DAO layer pattern to encapsulate your DB Access and down the road that is all you will need to change.

- Romain Hippeau

Redis syntax is completely different from standard SQL so using JDBC doesn't help encapsulating different back-ends as you suggest: I would have to write new queries anyway... – muriloq Jun 16 '10 at 14:00
@muriloq - but the mechanical acquiring and releasing resources is standard. – Romain Hippeau

spring wrapper

Spring provides a wrapper around both implementations(Jredis Jedis) and they're providing serialization/deserialization, amongst other things: 

1
2
3
4
Person p = new Person("Joe", "Trader", 33);
template.convertAndSet("trader:1", p);
Person samePerson = template.getAndConvert("trader:1", Person.class);
Assert.assertEquals(p, samePerson);
放弃spring wrapper

项目中本来打算使用spring wrapperbean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">

  <property name="maxActive" value="20"/> 
  <property name="maxIdle" value="10"/> 
  <property name="maxWait" value="1000"/>
</bean>
<!-- jedis shard信息配置 -->
<bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo">
  <constructor-arg index="0" value="*.*.*.*"/> 
  <constructor-arg index="1" value="6379"/>
</bean>
<!-- jedis shard pool配置 -->
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
  <constructor-arg index="0" ref="jedisPoolConfig"/> 
  <constructor-arg index="1">
    <list>
      <ref bean="jedis.shardInfo"/>
    </list>
  </constructor-arg>
</bean>
<bean id="jedisCommands" factory-bean="shardedJedisPool" factory-method="getResource"/>

上面的这种配法在spring初始化时获取一次实例化jedisCommands,而后每次的redis的调用时并未从pool中获取,解决方案:

设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- POOL配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  <property name="maxActive"  value="20" />
  <property name="maxIdle" value="10" />
  <property name="maxWait" value="1000" />
  <property name="testOnBorrow"  value="true"/>
</bean>
 
<!-- jedis shard信息配置 -->
<bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo">
  <constructor-arg index="0" value="*.*.*.*" />
  <constructor-arg index="1" value="6379" />
</bean>
 
<!-- jedis shard pool配置 -->
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
  <constructor-arg index="0" ref="jedisPoolConfig" />
  <constructor-arg index="1">
    <list>
      <ref bean="jedis.shardInfo" />
    </list>
  </constructor-arg>
</bean>

参考:
http://stackoverflow.com/questions/3047010/best-redis-library-for-java
https://github.com/xetorthio/johm

https://github.com/xetorthio/jedis/issues/closed#issue/76

posted @ 2016-04-09 16:29  JavaIceman  阅读(305)  评论(0编辑  收藏  举报