SETRANGE 命令从偏移量 offset
开始, 用 value
参数覆盖键 key
中储存的字符串值。如果键 key
不存在,当作空白字符串处理。
SETRANGE 命令可以保证key
中的字符串足够长,以便将 value
覆盖到key
中。
如果键 key
中原来所储存的字符串长度比偏移量小(比如字符串只有 5
个字符长,但要设置的 offset
是 10
), 那么原字符和偏移量之间的空白将用零字节 "\x00"
进行填充。
因为 Redis 字符串的大小被限制在 512 兆以内, 所以用户能够使用的最大偏移量为 229 - 1(536870911) , 如果要使用比这更大的空间, 可以用多个 key
。
注意: 当生成一个很长的字符串时, 因 Redis 需要分配内存空间, 这种操作有时候可能会造成服务器阻塞。 在2010年生产的Macbook Pro上, 设置偏移量为 536870911(分配512MB 内存)将耗费约 300 毫秒, 设置偏移量为 134217728(分配128MB 内存)将耗费约 80 毫秒, 设置偏移量 33554432(分配32MB 内存)将耗费约 30 毫秒, 设置偏移量为 8388608(分配8MB 内存)将耗费约 8 毫秒。
*使用模式
有了 SETRANGE 和 GETRANGE 命令,我们可以像使用线性数组一样O(1)效率随机访问字符串。
*返回值
*例子
基本用法:
redis>
SET key1 "Hello World"
"OK"redis> SETRANGE key1 6 "Redis"
(integer) 11redis> GET key1
"Hello Redis"
使用0填充的例子:
redis>
SETRANGE key2 6 "Redis"
(integer) 11redis> GET key2
"\u0000\u0000\u0000\u0000\u0000\u0000Redis"