Если вам нужно хранить 100GB и вы не ожидать, что ваши данные будут расти намного дальше, начните с 3 REDIS экземпляров, каждый с 64 Гб оперативной памяти, общей 192Gb, более чем достаточно держите свой набор данных и увеличивайте пространство.
Каждый экземпляр redis будет мастером, поэтому ваши данные будут разделены между экземплярами одинаково. Вы должны будете шард по экземплярам от уровня приложений с использованием простого алгоритма хэширования, например ...
(from your application layer)
shardKey = "redis" + getShardKey(cacheKey);
redisConnection = getRedisConnectionByShardKey(shardKey);
//do work with redisConnection here
Функция getShardKey(string)
принимает cacheKey, преобразует его в целое число, то моды его число экземпляров redis, возвращающих либо 0, 1, либо 2. Настройте пул соединений для каждого экземпляра redis, дайте каждому из них имя типа redis0
, redis1
и т. д. после вызова хэш-функции используйте клавишу осколка, чтобы получить соединение для экземпляра target redis. После того, как у вас есть необходимые данные, выполните агрегацию в своем прикладном уровне.
Это простой подход; он распределяет данные поровну между экземплярами redis (более или менее) и избегает наложения всего на один экземпляр redis. Redis однопоточен, поэтому, если вы делаете много ввода-вывода, вы будете связаны тем, насколько быстро ваш процессор может обслуживать запросы; использование нескольких экземпляров распределяет эту нагрузку.
Это решение ломается, когда ваш набор данных превышает 180 ГБ. Если вы добавите другой экземпляр redis для размещения большего набора данных, хеш-функцию нужно обновить, чтобы отображать по модулю 4, а не 3, и вам придется перемещать большую часть ваших данных, это становится уродливым, поэтому используйте этот подход, только если вы на 100% уверены, что набор данных останется ниже 150 ГБ.
Вы собираетесь сбросить все данные в Redis (возможно, плохую идею) или написать обертку, которая помещает некоторые данные в Redis и истекает через некоторое время. Кроме того, я жду ответов на вопрос, если Redis - лучший способ сделать это. – rizwaniqbal
Я буду хранить данные за максимальное время 1 месяца. –
Имейте в виду, что вам нужно поместить все данные, хранящиеся в redis, в оперативную память –