- Есть такая штука - 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]