Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 3.25 KB

Redis-and-collections.md

File metadata and controls

34 lines (25 loc) · 3.25 KB
  • Есть такая штука - Redis.
  • Есть такой интерфейс - java.util.Map

Мы очень любим Redis, но его использование через отдельную клиентскую библиотеку в Java нам не очень нравится. Это работает, это удобно, но не прикольно. Опять же, в Java есть базовый интерфейс для реализции хеш-таблиц - Map. А в Redis'е есть структура данных hash.

Нам бы хотелось работать с хешами в Redis через этот базовый интерфейс. То есть - у меня есть некий объект, который реализует интерфейс Map, я просто дергаю его методы get/put/etc., а данные реально хранятся в Redis'е, не в моем Java-приложении. Тогда я мог бы передавать этот объект куда угодно, где ожидается интерфейс Map и всё будет просто работать.

Всякие другие мысли:

  • Данных у нас очень много и на одну машину с Redis'ом они просто не влезут. Хорошо бы реализации самой "размазывать" данные по кластеру Redis'ов, полностью скрывая детали о количестве экземпляров редиски и прочем.
  • Поддержка добавления/удаления Redis-серверов на лету - это очень хорошо. Ключевое слово - "на лету".
  • Избыточность хранения данных в этом кластере редисок - интересная мысль. Ну, это так чтобы одна редиска упала, а её данные никуда не пропали.
  • В Java Collections Framework кроме Map есть и другие интерфейсы - List, Set, SortedSet, Queue, Deque, SortedMap. Воооооот.

Немного деталей:

  • Вполне достаточно будет сделать поддержку только Map[String, Integer]. Не надо универсального решения для любых типов данных. Для List, Set и прочего вполне достаточно сделать List[Integer] или List[String]
  • Можно использовать любые redis-решения: голую редиску, sentinel или redis-cluster.
  • Писать нужно на Java (версия 7 и выше) или Kotlin.
  • Ну и вообще - делайте что хотите, лишь бы работало.
  • По всем вопросам смело писать на [email protected]
<script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-60374351-1', 'auto'); ga('send', 'pageview'); </script>