Redisson против Jedis для redis [закрыто]

теперь я должен использовать Java-клиент для Redis. Я наткнулся джедаев и Рэдиссон.

редактировать: рефрейминг, поскольку вопрос был основан на мнении.

что более эффективно с точки зрения скорости? Какие-нибудь ориентиры?

который из них может обеспечить следующее?

  • распределенные блокировки (и обновление некоторых ключей на карте)

  • автоматический ключевой уведомление об истечении срока действия, но я хочу, чтобы это было получено только одним конкретным подписчиком из группы подписчиков(аналогично концепции группы потребителей в Apache Kafka). Как этого можно достичь?

PS: пожалуйста, не отмечайте его как дубликат этой.

1 ответов


этот вопрос основан на мнении, но позволяет получить некоторые объективные моменты в нем:

TL; DR:

выбор драйвера зависит от нескольких вещей:

  • дополнительные зависимости
  • модель программирования
  • масштабируемость
  • будучи самоуверенным относительно реализации функций высокого уровня
  • перспектива вашего проекта, направление, в котором вы хотите evolve

объяснение

дополнительные зависимости

некоторые проекты не согласны с дополнительными зависимостями и переходными зависимостями при добавлении библиотеки.

Jedis почти не зависит, он требует Apache Commons Pool 2 для подключения пула.

Redisson требует Netty, API JCache и реактор проекта в качестве основных зависимостей. Это расширяемый, потому что он интегрируется со многими другими библиотеки (хранилище сеансов Tomcat).

модель программирования

вот как вы взаимодействуете со своим клиентом Redis. Он также определяет уровень абстракции.

Jedis-это низкоуровневый драйвер, подвергающий Redis API вызовам метода Java:

Jedis jedis = …;

jedis.set("key", "value");

List<String> values = jedis.mget("key", "key2", "key3");

Redisson-это клиент высокого уровня, который предоставляет свои функции через различные объекты API:

Redisson redisson = …

RMap map = redisson.getMap("my-map"); // implement java.util.Map

map.put("key", "value");

map.containsKey("key");

map.get("key");

каждый вызов вызывает один или несколько вызовов Redis, некоторые из них реализованы с Lua (Redis "Сценарии").

масштабируемость

для Java доступно несколько драйверов с различными свойствами, которые могут соответствовать вашему проекту. Масштабируемость играет в это. Глядя на драйверы, он сводится к тому, как драйверы работают со своими ресурсами и какие модели программирования они поддерживают.

Jedis использует блокировку ввода-вывода, а вызовы методов синхронны. Поток вашей программы должен ждать, пока ввод-вывод не будет обработан сокетами. Нет асинхронный (Future, CompletableFuture) или реактивной поддержки (RxJava Observable или реактивные потоки Publisher).

экземпляры клиента Jedis не являются потокобезопасными, поэтому они требуют объединения в пул соединений (экземпляр Jedis на вызывающий поток).

Redisson использует неблокирующий ввод-вывод и управляемый событиями уровень связи с netty. Вызовы методов являются синхронными, асинхронными или реактивными (через Project Reactor 2.0 или 3.1). Соединения объединяются в пул, но сам API является потокобезопасным и требует меньше ресурсов. Я не совсем уверен, но, возможно, вы даже можете работать на одном соединении. Это самый эффективный способ работы с Redis.

мнение о реализации клиента

эти пункты касаются того, как реализуются клиенты.

оба клиента имеют отличную защиту, и вы можете выполнить ваши требования с обеих библиотек.

Jedis-это простая реализация, которая просто записывает команды в OutputStream и анализирует ответы. Не более того.

если вы хотите высокоуровневые функции, то вам нужно реализовать их с помощью API Redis. Это дает вам полный контроль над командами, которые вы вызываете, и результирующим поведением. Реализация ваших функций может потребовать дополнительных усилий.

Redisson-это клиент высокого уровня, который предоставляет функции через свои абстракции. В то время как вы можете использовать эти объекты без необходимости знать их поддерживаются Redis (Map, List, Set,...), каждый вызов API переводится на один или несколько вызовов Redis, некоторые-на выполнение сценария Lua.

Вам может понравиться или не понравиться, как ведет себя Redisson и как он реализует функции, но, в конце концов, вы мало что можете с этим поделать. Использование функций высокого уровня Redissons может снизить усилия по реализации.

Outlook

этот раздел целиком и полностью зависит от того, куда вы направляетесь. Джедаи поддерживают всех Команды API Redis, Redis Standalone, Redis Sentinel и Redis Cluster. В настройках master-slave нет чтения slave, но я предполагаю, что это всего лишь вопрос времени, когда Джедаи предоставят эти функции.

С jedis вы не можете идти асинхронно, а использование расширенных функций AWS ElastiCache или slave reads требует вашей собственной реализации.

Redisson имеет широкий охват различных установок. Он поддерживает все, что поддерживает Jedis, и предоставляет стратегии чтения для Настройки Master / Slave улучшили поддержку AWS ElastiCache.