Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

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"