Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/redis-command-setrange.html

Redis SETRANGE 命令

Redis 字符串(Strings)底层数据结构及所有相关命令 Redis 字符串(Strings)底层数据结构及所有相关命令


Redis SETRANGE 命令从偏移量 offset 开始,用 value 参数覆写(overwrite)指定 key 所储存的字符串值。不存在的 key 当作空白字符串处理。

SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果指定的 key 原来储存的字符串长度比偏移量小(比如,字符串只有 5 个字符长,但你设置的 offset 是 10),那么原字符和偏移量之间的空白将用零字节(zero-bytes)来填充。

命令格式

SETRANGE key offset value

可用版本:>=2.2.0

时间复杂度:对小的字符串,平摊复杂度 O(1);否则为 O(M),M 为 value 参数的长度。

注意,你能使用的最大偏移量是 2^29-1(536870911),因为 Redis 字符串的大小被限制在 512兆(megabytes)以内。如果你需要使用比这更大的空间,你可以使用多个 key。

当生成一个很长的字符串时,Redis 需要分配内存空间,该操作有时候可能会造成服务器阻塞(block)。在 2010 年的 Macbook Pro 上,设置偏移量为 536870911(512 MB 内存分配),耗时约 300 毫秒,设置偏移量为 134217728(128 MB 内存分配),耗时约 80 毫秒,设置偏移量 33554432(32 MB 内存分配),耗费约 30 毫秒,设置偏移量为 8388608(8 MB 内存分配),耗时约 8 毫秒。注意若首次内存分配成功之后,再对同一个 key 调用 SETRANGE 操作,无须再重新内存。

命令返回值

被 SETRANGE 修改之后,字符串的长度。

示例

redis> SET key1 "Hello World"
"OK"
redis> SETRANGE key1 6 "Redis"              # 设置 key 存在
(integer) 11
redis> GET key1
"Hello Redis"
redis> SETRANGE key2 6 "Redis"              # 设置不存在的 key
(integer) 11
redis> GET key2
"\u0000\u0000\u0000\u0000\u0000\u0000Redis"