Jedis可以获取/设置Java POJO吗?

hon*_*ium 17 jedis

我正在使用Jedis作为连接Redis服务器的Java客户端.

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

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

问题2:如果我使用ShardedJedis,它无法设置身份验证/密码?而Jedis类可以(使用auth(String password)).

小智 17

问题1:Jedis不会处理POJO.您应序列化为字符串或byte []并使用jedis来执行此操作,但我不建议将您的Java对象存储为序列化,因为您将无法使用所有Redis酷功能.另一种方法是使用类似对象哈希映射器的东西,比如JOhm.

问题2:ShardedJedis仅支持在单个密钥上运行的命令.这是为了保证原子性.如果要在特定redis上运行特定命令,则应使用shardedJedis.getShard('someky')该命令将返回Jedis可以使用的实例.处理此问题的另一种方法是推荐的方法,即在JedisShardInfo实例中指定密码.你可以在测试中看到这个例子.

  • @xertorthio:感谢您分享JOhm项目的链接,某些看起来很有趣!但是,当你提到"我不建议将你的java对象存储为序列化,因为你将无法使用所有Redis酷炫功能",你指的是其他Redis酷炫的功能? (5认同)

Nik*_*rov 5

对问题 1 的回答:

Redisson(Redis Java 客户端)可以处理 POJO 对象。而且您不需要每次都自己序列化/反序列化对象并使用连接(获取/释放)。这一切都是由Redisson完成的。

下面是一个例子:

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

或者您可以使用LiveObjectService将 POJO 字段存储为 Redis 哈希对象中的键。

@REntity
public class MyObject {

   @RId
   private String id;
   @RIndex
   private String value;
   private MyObject parent;

   public MyObject(String id) {
       this.id = id;
   }

   public MyObject() {
   }

   // getters and setters

}
Run Code Online (Sandbox Code Playgroud)

Redisson支持许多流行的编解码器一样Jackson JSONAvroSmileCBORMsgPackKryoFSTLZ4SnappyJDK Serialization