English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Партилизация Redis

Разделение - это процесс разделения данных на множество примеров Redis, поэтому каждый пример сохраняет только подмножество ключей.

Преимущества разделения

  • Использование суммы памяти множества компьютеров позволяет нам создавать более крупные базы данных.

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

Недостатки разделения

Некоторые функции Redis не очень хорошо работают в разделе:

  • Операции,涉及的多个 ключи, обычно не поддерживаются. Например, если два набора данных set направлены на разные примеры Redis, вы не можете выполнять операцию пересечения для этих двух наборов данных.

  • Транзакции,涉及的 ключи Redis, не могут быть использованы.

  • При использовании разделения обработка данных может быть сложной, например, вам нужно обрабатывать несколько файлов rdb/aof и сохранять файлы сохранения из нескольких примеров и узлов.

  • Увеличение или уменьшение объема также может быть сложным. Большинство кластеров Redis поддерживают функцию прозрачного балансировки данных при добавлении и удалении узлов в процессе работы, но такие системы, как клиентское разделение, прокси и другие, не поддерживают эту функцию. Однако, технология presharding может помочь в этом.

Тип разделения

Redis имеет два типа партилизации. Предположим, что у нас есть 4 примера Redis R0, R1, R2, R3 и множество ключей, таких как user:1, user:2, и различные способы выбора, где именно этот ключ будет храниться. То есть, существуют различные системы для mapping ключа к определенному Redis-сервису.

Партилизация по диапазону

Самый простой метод партилизации - это партилизация по диапазону, которая означает mapping объектов определенного диапазона к определенному примеру Redis.

Например, пользователи с ID от 0 до 10000 будут сохранены в примере R0, пользователи с ID от 10001 до 20000 будут сохранены в R1 и так далее.

Этот метод возможен и используется на практике, но недостаток в том, что нужно иметь таблицу соответствия интервала к примерам. Эта таблица должна быть управляема, а также таблицы соответствия для различных объектов, что не всегда является хорошим методом для Redis.

Хэш-партилизация

Другой метод партилизации - это хэш-партилизация. Это подходит для любого ключа и не требует формы object_name: как описано ниже:

  • Используйте хеш-функцию для преобразования ключа в число, например, используя хеш-функцию crc32. Выполнение crc32(foobar) выведет целое число, например, 93024922.

  • Для этого числа используем модуляцию, чтобы преобразовать его в число от 0 до 3, и можно будетemapить это число к одному из четырех примеров Redis. 93024922 % 4 = 2, что означает, что ключ foobar должен быть сохранен в примере R2. Обратите внимание: операция модуляции это остаток от деления, обычно реализуется оператором % в множестве языков программирования.