The Java clients listed on the Redis home page have Jdbc-redis Jredis Jedis three, and the following describes the advantages and disadvantages of three clients and other related tools.
  |
Redis version supported |
performance |
maintenance |
recommended |
  |
  |
  |
jredis |
1.2.N release 2.0.0 Not yet release version |
fast |
  |
& nbsp; |
jedis |
2.0.0 release |
|
actively developed |
recommended |
Jdbc-redis
Jdbc-redis is just a JDBC wrapper for Jredis database.
If you plan on the using your code with different back-ends then the JDBC is a good the go. Note:it is isn't a complete JDBC implementation and the NOSQL would bleed through.
If you were going to stay with Redis then I would suggest using the API, which would give you more flexibility. Use a DAO layer pattern to encapsulate your DB Access and down the road, that's all you'll 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 has to write new queries Anyway...–muriloq June "
at
@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/deserializatio N, amongst other things:
1234 |
person p = new person ( "Joe" 33 ); template.convertandset ( "trader:1" , p); person Sameperson = Template.getandconvert ( "trader:1" , person. class assert.assertequals (p, Sameperson); |
The above method may have been adjusted, see the latest http://static.springsource.org/spring-data/data-keyvalue/docs/1.0.0.M2/reference/html/#redis
Discard Spring Wrapper
The project originally intended to use the 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"
/>
The above method of matching gets the instantiation of jediscommands at spring initialization, and then each Redis call is not fetched from the pool, the solution:
Set up
1234567891011121314151617181920212223 |
<!-- 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
>
|
Reference:
Http://stackoverflow.com/questions/3047010/best-redis-library-for-java
Https://github.com/xetorthio/johm
Https://github.com/xetorthio/jedis/issues/closed#issue/76
Redis Data Summary (10) Java Client