Могут ли джедаи получить/установить Java POJO?

Я использую Jedis в качестве java-клиента для подключения к серверам Redis.

Вопрос 1: Кажется, нет способа получить/установить Object ‹ ? расширяет Сериализуемый>? Все значения должны быть String или byte[]?

Другие клиенты, такие как «JRedis» и Spymemcache (для сервера memcached), могут.

Вопрос 2: Если я использую ShardedJedis, он не может установить аутентификацию/пароль? В то время как класс Jedis может (используя auth (строковый пароль)).


person hongtium    schedule 05.09.2012    source источник


Ответы (2)


Обратите внимание на вопрос 1: джедаи не будут обрабатывать POJO. Вы должны сериализовать в строку или byte[] и использовать для этого jedis, хотя я не буду рекомендовать хранить сериализованные java-объекты, так как вы не сможете использовать все классные функции Redis. Другой подход заключается в использовании чего-то вроде средства отображения хэшей объектов, такого как JOhm.

Обратите внимание на вопрос 2: ShardedJedis будет поддерживать только команды, которые выполняются с помощью одной клавиши. Это должно гарантировать атомарность. Если вы хотите запустить определенную команду на определенном Redis, вы должны использовать shardedJedis.getShard('someky'), который вернет экземпляр Jedis, который вы можете использовать. Другой способ справиться с этим, рекомендуемый, — указать свой пароль в экземплярах JedisShardInfo. Вы можете увидеть и пример этого в тесты.

person xetorthio    schedule 10.09.2012
comment
@xertorthio: Спасибо, что поделились ссылкой на проект JOhm, выглядит интересно! Однако, когда вы упомянули, я не буду рекомендовать хранить ваши Java-объекты в сериализованном виде, так как вы не сможете использовать все интересные функции Redis, о каких других интересных функциях Redis вы говорите? - person Nishant Kelkar; 28.01.2015
comment
@Nishant Я думаю, он имел в виду такие вещи, как INCR, чтобы вносить атомарные изменения в ваши данные. - person Tim Bartsch; 30.06.2015
comment
кажется, что проект johm не активен. вот активная вилка этого проекта: johm - person WorM; 24.08.2016

Ответ на вопрос 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();

или вы можете использовать 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

}

Redisson поддерживает многие популярные кодеки, такие как Jackson JSON, Avro, Smile, CBOR, MsgPack, Kryo, FST, LZ4, Snappy и JDK Serialization.

person Nikita Koksharov    schedule 03.09.2016