Spec-Zone.ru › Redis

SET

SET
Синтаксис
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
  EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
Доступно с версии:
1.0.0
Сложность по времени:
O(1)
Категории ACL:
@write, @string, @slow,

Установить key, чтобы содержать строку value. Если key уже содержит значение, оно перезаписывается, независимо от его типа. Любое предыдущее время жизни, связанное с ключом, отбрасывается при успешном выполнении SET операции.

Параметры

Команда SET поддерживает набор параметров, которые изменяют её поведение:

  • EX секунды -- Установить указанное время истечения срока действия в секундах.
  • PX миллисекунды -- Установить указанное время истечения срока действия в миллисекундах.
  • EXAT время-Unix-секунды -- Установить указанное время Unix, в секундах, после которого ключ истечёт.
  • PXAT время-Unix-миллисекунды -- Установить указанное время Unix, в миллисекундах, после которого ключ истечёт.
  • NX -- Установить ключ только если он ещё не существует.
  • XX -- Установить ключ только если он уже существует.
  • KEEPTTL -- Сохранить время жизни, связанное с ключом.
  • GET -- Возвратить старую строку, сохранённую в ключе, или nil, если ключ не существовал. Возвращается ошибка и SET прерывается, если значение, хранящееся в ключе, не является строкой.

Примечание: Так как параметры команды SET могут заменить SETNX, SETEX, PSETEX, GETSET, возможно, что в будущих версиях Redis эти команды будут устаревшими и в конечном итоге удалены.

Возврат

Простой строковый ответ: OK если SET было выполнено корректно.

Ответ null: (nil) если SET операция не была выполнена, потому что пользователь указал NX или XX параметр, но условие не было соблюдено.

Если команда выполняется с параметром GET, вышесказанное не применимо. Вместо этого будет возвращено следующее, независимо от того, была ли SET фактически выполнена:

Строковый ответ: старое строковое значение, хранящееся в ключе.

Ответ null: (nil) если ключ не существовал.

Примеры

SET mykey "Hello"
GET mykey

SET anotherkey "will expire in a minute" EX 60

Шаблоны

Примечание: Следующий шаблон не рекомендуется в пользу алгоритма Redlock, который немного сложнее реализовать, но обеспечивает лучшие гарантии и является отказоустойчивым.

Команда SET resource-name anystring NX EX max-lock-time — простой способ реализовать систему блокировок с Redis.

Клиент может получить блокировку, если вышеуказанная команда возвращает OK (или повторить попытку через некоторое время, если команда возвращает Nil), и удалить блокировку, просто используя DEL.

Блокировка будет автоматически освобождена после истечения времени действия.

Можно сделать эту систему более надёжной, изменив схему разблокирования следующим образом:

  • Вместо установки фиксированной строки, установить непредсказуемую длинную случайную строку, называемую токеном.
  • Вместо удаления блокировки с помощью DEL, отправить скрипт, который удаляет ключ только если значение совпадает.

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

Пример скрипта разблокирования будет похож на следующий:

if redis.call("get",KEYS[1]) == ARGV[1]
then
    return redis.call("del",KEYS[1])
else
    return 0
end

Скрипт должен вызываться с EVAL ...script... 1 resource-name token-value

История

  • Начиная с версии Redis 2.6.12: Добавлены параметры EX, PX, NX и XX.
  • Начиная с версии Redis 6.0.0: Добавлен параметр KEEPTTL.
  • Начиная с версии Redis 6.2.0: Добавлены параметры GET, EXAT и PXAT.
  • Начиная с версии Redis 7.0.0: Разрешено совместное использование параметров NX и GET.

© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/set/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API