Redis setrange 命令

SETRANGE key offset value

覆盖存储在key中的部分字符串,位置从offset开始,到整个字符串长度结束。如果 offset 大于字符串长度,使用0字节填充字符串以使offtset位适合。key不存在情况被看作空字符串,所以这个命令能保证字符串足够长,能在offset处设置value。

offset的最大值是229 -1 (536870911),因为Redis字符串最大512M字节。如果超出这个范围,可以使用多个key。

警告:当设置的是最后一字节 ,存储在key中的字符串还没有存储一个字符串值,或者存储的是一个短的字符串值时,Redis需要分配所有的中间内存,这会阻塞Redis服务器一段时间。在2010年的 MacBook Pro上,设置536870911字节 (分配512MB内存) 需花费300ms,设置134217728字节 (分配128MB内存) 需花费80m,设置33554432字节 (分配32MB内存) 需花费30ms,设置8388608字节 (分配8MB内存) 需花费8ms。 需要注意的是,一旦第一步内存分配完成,对于同一个 key 接下来调用 SETRANGE 将不会有分配内存开销。

模式

通过 SETRANGE 和 GETRANGE 命令,Redis字符串可以作为线性数组使用,实现 O(1) 随机访问。这是非常快速和高效的存储在许多实际应用中。

返回值

整数应答Integer reply: 修改之后的字符串长度。

例子

Basic usage:

redis> SET key1 “Hello World”
"OK"
redis> SETRANGE key1 6 “Redis”
(integer) 11
redis> GET key1
"Hello Redis"
redis> 

0填充的例子:

redis> SETRANGE key2 6 “Redis”
(integer) 11
redis> GET key2
"\u0000\u0000\u0000\u0000\u0000\u0000Redis"
redis>