SETRANGE
SETRANGE
SETRANGE key offset value
- Доступно с версии:
- 2.2.0
- Сложность по времени:
- O(1), не считая времени, затрачиваемого на копирование новой строки на место. Обычно эта строка очень мала, поэтому амортизированная сложность равна O(1). В противном случае сложность составляет O(M), где M — длина аргумента value.
- Категории ACL:
-
@write,@string,@slow,
Перезаписывает часть строки, хранящейся по ключу key, начиная со значения указанного смещения, на всю длину value. Если смещение больше текущей длины строки по ключу key, строка дополняется нулями, чтобы смещение offset соответствовало. Несуществующие ключи считаются пустыми строками, поэтому эта команда гарантирует, что строка будет достаточно длинной, чтобы можно было установить value по смещению offset.
Обратите внимание, что максимальное смещение, которое можно установить, равно 229 - 1 (536870911), так как строки Redis ограничены 512 мегабайтами. Если вам нужно увеличить размер сверх этого значения, вы можете использовать несколько ключей.
Предупреждение: При установке последнего возможного байта и строка, хранящаяся по ключу key, ещё не содержит строку или содержит небольшую строку, Redis должен выделить всю промежуточную память, что может блокировать сервер на некоторое время. На компьютере 2010 MacBook Pro установка байта с номером 536870911 (выделение 512 МБ) занимает ~300 мс, установка байта с номером 134217728 (выделение 128 МБ) занимает ~80 мс, установка бита с номером 33554432 (выделение 32 МБ) занимает ~30 мс, а установка бита с номером 8388608 (выделение 8 МБ) занимает ~8 мс. Обратите внимание, что после того, как это первоначальное выделение выполнено, последующие вызовы SETRANGE для того же ключа key не будут иметь накладных расходов на выделение.
Паттерны
Благодаря SETRANGE и аналогичным командам GETRANGE вы можете использовать строки Redis в качестве линейного массива с произвольным доступом O(1). Это очень быстрый и эффективный способ хранения данных во многих реальных случаях.
Возврат
Целочисленный ответ: длина строки после её изменения командой.
Примеры
Базовое использование:
SET key1 "Hello World" SETRANGE key1 6 "Redis" GET key1
Пример нулевого заполнения:
SETRANGE key2 6 "Redis" GET key2
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/setrange/