发布于 2015-09-04 08:52:21 | 229 次阅读 | 评论: 0 | 来源: 网络整理
SETRANGE key offset value
用 value
参数覆写(overwrite)给定 key
所储存的字符串值,从偏移量 offset
开始。
不存在的 key
当作空白字符串处理。
SETRANGE 命令会确保字符串足够长以便将 value
设置在指定的偏移量上,如果给定 key
原来储存的字符串长度比偏移量小(比如字符串只有 5
个字符长,但你设置的 offset
是 10
),那么原字符和偏移量之间的空白将用零字节(zerobytes, "x00"
)来填充。
注意你能使用的最大偏移量是 2^29-1(536870911) ,因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内。如果你需要使用比这更大的空间,你可以使用多个 key
。
Warning
当生成一个很长的字符串时,Redis 需要分配内存空间,该操作有时候可能会造成服务器阻塞(block)。在2010年的Macbook Pro上,设置偏移量为 536870911(512MB 内存分配),耗费约 300 毫秒, 设置偏移量为 134217728(128MB 内存分配),耗费约 80 毫秒,设置偏移量 33554432(32MB 内存分配),耗费约 30 毫秒,设置偏移量为 8388608(8MB 内存分配),耗费约 8 毫秒。 注意若首次内存分配成功之后,再对同一个 key
调用 SETRANGE 操作,无须再重新内存。
M
为 value
参数的长度。
# 对非空字符串进行 SETRANGE
redis> SET greeting "hello world"
OK
redis> SETRANGE greeting 6 "Redis"
(integer) 11
redis> GET greeting
"hello Redis"
# 对空字符串/不存在的 key 进行 SETRANGE
redis> EXISTS empty_string
(integer) 0
redis> SETRANGE empty_string 5 "Redis!" # 对不存在的 key 使用 SETRANGE
(integer) 11
redis> GET empty_string # 空白处被"x00"填充
"x00x00x00x00x00Redis!"