Поиск…


Вступление

Ключевое слово Redis можно рассматривать как хеш-таблицу или ключи сопоставления словаря структурам данных в базе данных.

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

Синтаксис

  • Шаблон KEYS
  • Ключ PERSIST
  • Секунды клавиши EXPIRE
  • Временная метка ключа EXPIREAT
  • Ключ TTL
  • PEXPIRE ключ миллисекунды
  • PEXPIREAT key milliseconds-timestamp
  • Кнопка PTTL
  • UNLINK [ключ ...]
  • Клавиша DEL [ключ ...]
  • Курсор SCAN [шаблон MATCH] [COUNT count]

замечания

Для действительных символов в клавишах Redis руководство объясняет это полностью :

Клавиши Redis бинарно безопасны, это означает, что вы можете использовать любую двоичную последовательность в виде ключа, начиная с строки, например «foo», до содержимого файла JPEG. Пустая строка также является допустимым ключом.

Несколько других правил о ключах:

Очень длинные ключи - это не очень хорошая идея, например, ключ с 1024 байтами - плохая идея не только по памяти, но и потому, что поиск ключа в наборе данных может потребовать нескольких дорогостоящих ключевых сравнений. Даже когда задача состоит в том, чтобы соответствовать наличию большого значения, прибегнуть к хэшированию (например, с SHA1), это лучшая идея, особенно с точки зрения памяти и пропускной способности.

Очень короткие ключи часто не очень хорошая идея. Существует мало смысла писать «u1000flw» в качестве ключа, если вы можете вместо этого написать «user: 1000: followers». Последний является более читаемым, а добавленное пространство является незначительным по сравнению с пространством, используемым самим объектом ключа и объектом value. В то время как короткие клавиши, очевидно, потребляют немного меньше памяти, ваша задача - найти правильный баланс.

Постарайтесь придерживаться схемы. Например, «object-type: id» - хорошая идея, как в «user: 1000». Точки или тире часто используются для многословных полей, как в комментарии «1234: reply.to» или «comment: 1234: reply-to».

Максимально допустимый размер ключа - 512 МБ.

Будьте осторожны с использованием команды KEYS против производственной системы, это может вызвать серьезные проблемы с производительностью. Если вам нужно выполнить поиск в ключевом пространстве, команды SCAN являются лучшей альтернативой.

Действующие ключи

Клавиши Redis являются двоично-безопасными, поэтому буквально все может использоваться как ключ. Единственные ограничения в том, что они должны быть меньше 512 МБ.

Примеры действительных ключей:

7
++++
`~!@#$%^&*()-_=+
user:10134
search/9947372/?query=this%20is%20a%28test%29%20query
<div id="div64">

Any other string less than 512MB in size.
The raw binary content of an image or other binary file.
An entire multi-line text document.
An entire SQL query.
Any integer, hexadecimal, octal, or binary value.
Anything else you can think of less than 512MB in size. 

Недействительные ключи Redis:

Anything larger than 512MB.

Ключевые схемы именования

Для ясности и ремонтопригодности часто рекомендуется разработать систему или схему для обозначения ваших ключей Redis. Вот несколько примеров общих и поддерживаемых систем для обозначения ваших ключей:

user:10134
user:10134:favorites
user:10134:friends
user:10134:friends-of-friends

user:10134
user:10134/favorites
user:10134/friends
user:10134/friends.of.friends

user/10134
user/10134/favorites
user/10134/friends
user/10134/friends of friends

Обратите внимание, что, хотя это разрешено, большие клавиши используют больше памяти и приводят к более медленному времени поиска, поэтому использование ключа 500 МБ может быть отличной идеей для производительности. Лучшей идеей может быть использование SHA-1, SHA-256 или MD5 хэша большого двоичного объекта в качестве ключа:

image/9517bb726d33efdc503a43582e6ea2eea309482b
image52e9df0577fca2ce022d4e8c86b1eccb070d37bef09dec36df2fabbfa7711f5c

Перечисление всех ключей

Вы можете перечислить все ключи в базе данных Redis, выполнив следующие команды из redis-cli:

KEYS *

Параметр для KEYS - это шаблонное соответствие шаблону. Примеры поддерживаемых шаблонов включают:

h?llo matches hello, hallo and hxllo
h*llo matches hllo and heeeello
h[ae]llo matches hello and hallo, but not hillo
h[^e]llo matches hallo, hbllo, ... but not hello
h[a-b]llo matches hallo and hbllo

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

TTL и срок действия ключа

Значения срока действия ключа могут управляться пользователем вне команд обновления. Redis позволяет пользователю определить текущее время жизни (TTL) ключа с помощью команды TTL:

TTL key

Эта команда вернет TTL ключа в секундах или вернет специальные значения -1 или -2. A -1 указывает, что ключ является постоянным (не истекает), а -2 указывает, что ключ не существует.

Ключ с истечением срока действия может быть выполнен с использованием команды PERSIST:

PERSIST KEY

и постоянный ключ может быть истечен с использованием команды EXPIRE:

EXPIRE KEY seconds

Expire также может использоваться для изменения TTL существующего ключа. Кроме того, вы можете использовать команду EXPIREAT с отметкой времени UNIX, чтобы установить время истечения срока действия.

Существуют миллисекундные версии команд TTL, EXPIRE и EXPIREAT с префиксом P.

Удаление ключей

Redis предоставляет две функции для удаления ключей из базы данных: del и unlink.

Функция del удаляет из базы данных один или несколько ключей. Команда del заставляет Redis немедленно восстановить память для удаленной клавиши в текущем потоке выполнения. Время выполнения для del пропорционально количеству отдельных элементов, удаленных из всех ключей.

Функция unlink действует как команда del, она удаляет один или несколько ключей из базы данных. Однако, в отличие от команды del, любая память, используемая этими ключами, восстанавливается асинхронно в другом потоке.

Сканирование Redis Keyspace

Redis предоставляет команду SCAN для итерации по ключам в базе данных, соответствующей определенному шаблону. Redis поддерживает сопоставление шаблонов стиля glob в команде SCAN.

Команда SCAN предоставляет итератор на основе курсора в ключевом пространстве Redis. Итериальная последовательность вызовов для SCAN начинается с того, что пользователь совершает вызов с аргументом указателя, установленным в 0. Результатом этого вызова является пакет элементов и обновленный курсор, который передается на следующий вызов SCAN. Эта итерация продолжается до тех пор, пока Redis не вернет курсор 0.

Следующая функция Python демонстрирует основное использование SCAN:

def scan_keys(r, pattern):
    "Returns a list of all the keys matching a given pattern"

    result = []
    cur, keys  = r.scan(cursor=0, match=pattern, count=2)
    result.extend(keys)
    while cur != 0:
        cur, keys = r.scan(cursor=cur, match=pattern, count=2)
        result.extend(keys)
        
    return result

Команда SCAN является рекомендуемым способом поиска ключей в базе данных и рекомендуется по команде KEYS * .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow