2012-09-05 22 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