2012-09-05 21 views
15

我使用Jedis作为连接到Redis服务器的Java客户端。Jedis可以设置Java POJO吗?

问题1:看来没有方法获取/设置对象<?扩展Serializable>?所有的值必须是String或byte []?

其他客户端,如“JRedis”和Spymemcache(用于memcached服务器)可以。

问题2:如果我使用ShardedJedis,它不能设置认证/密码?而Jedis类可以(使用auth(String password))。

回答

14

注意问题1:Jedis不处理POJO。您应该序列化为字符串或字节[]并使用jedis来完成此操作,但我不建议将您的java对象序列化,因为您将无法使用所有Redis超酷功能。一种不同的方法是使用类似对象哈希映射器的东西,如JOhm

注意问题2:ShardedJedis只支持在单个键上运行的命令。这是为了保证原子性。如果你想在一个特定的redis上运行一个特定的命令,你应该使用shardedJedis.getShard('someky')这将返回一个你可以使用的Jedis实例。 推荐的另一种处理方法是在JedisShardInfo实例中指定您的密码。 您可以在tests中查看此示例。

+5

@xertorthio:感谢您分享JOhm项目的链接,看起来有些有趣!但是,当您提到“我不建议存储您的Java对象序列化,因为您将无法使用所有Redis超酷功能”,您指的是其他Redis超酷功能? –

+0

@Nishant我猜他的意思是像INCR这样的东西对你的数据做原子改变。 –

+0

似乎johm项目不活跃。这是该项目的一个活跃分支:[johm](https://github.com/agrison/johm) – WorM

3

回答问题1:

Redisson(用于Java Redis的基础架构)可以用POJO对象。你不需要每次都自己序列化/反序列化对象,并使用连接(获取/释放)。这一切都是由雷森森完成的。

这里是例子:

RBucket<AnyObject> bucket = redisson.getBucket("anyObject"); 
// set an object 
bucket.set(new AnyObject()); 
// get an object 
AnyObject myObject = bucket.get(); 

,或者您可以使用LiveObjectService

Redisson支持多种流行的编解码器,像Jackson JSONAvroSmileCBORMsgPackKryoFSTLZ4SnappyJDK Serialization