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.
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 |
|
上面的方法可能已经调整,请参见最新的 http://static.springsource.org/spring-data/data-keyvalue/docs/1.0.0.M2/reference/html/#redis
放弃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 |
|
参考:
http://stackoverflow.com/questions/3047010/best-redis-library-for-java
https://github.com/xetorthio/johm
https://github.com/xetorthio/jedis/issues/closed#issue/76