Redis SETRANGE 命令用 value 参数覆写给定 KEY 所储存的 字符串 值,从偏移量 offset 开始。不存在的 KEY 当作空白字符串处理。
SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 KEY 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节来填充。
注意能使用的最大偏移量是 2^29-1(536870911) ,因为 Redis 字符串的大小被限制在 512M 以内。如果需要使用比这更大的空间,可以使用多个 KEY 。
当生成一个很长的字符串时,Redis 需要分配内存空间,该操作有时候可能会造成服务器阻塞。
192.168.98.70:6379> SETRANGE KEY offset value
参数 | 作用 |
---|---|
KEY | 要设置的 KEY |
offset | 开始的偏移量 |
value | 要设置的具体的值 |
被 SETRANGE 修改之后,字符串的长度。
对小字符串,平摊复杂度O(1)。否则为O(M), M 为 value 参数的长度。
>= 2.2.0
当 KEY 不存在时,会被当空串处理
# KEY 不存在
192.168.98.70:6379> EXISTS haicoder.net
(integer) 0
192.168.98.70:6379> SETRANGE haicoder.net 5 Redis
(integer) 10
192.168.98.70:6379> GET haicoder.net
"\x00\x00\x00\x00\x00Redis"
192.168.98.70:6379> DEL haicoder.net
(integer) 1
我们首先,使用 EXISTS 命令,判断键 haicoder.net 不存在。接着,使用 SETRANGE 命令,设置键 haicoder.net 从偏移量 5 开始的值为 Redis ,返回了字符串长度为 10。
最后,使用 GET 命令,获取刚设置的键 haicoder.net 的值,前面未设置值的被 0 填充。
当 KEY 存在时,在指定位置设置值
# KEY 存在
192.168.98.70:6379> SET haicoder.net Redis
OK
192.168.98.70:6379> SETRANGE haicoder.net 6 Mongo
(integer) 11
192.168.98.70:6379> GET haicoder.net
"Redis\x00Mongo"
192.168.98.70:6379> DEL haicoder.net
(integer) 1
首先,我们使用 SET 命令,设置 haicoder.net 的值为 Redis。接着,使用 SETRANGE 命令,设置键 haicoder.net 从偏移量 6 开始的值为 Mongo ,返回了字符串长度为 11。
当 offset 位置有值时,会被覆盖
# 覆盖
192.168.98.70:6379> SET haicoder.net Redis
OK
192.168.98.70:6379> SETRANGE haicoder.net 3 Mongo
(integer) 8
192.168.98.70:6379> GET haicoder.net
"RedMongo"
192.168.98.70:6379> DEL haicoder.net
(integer) 1
我们首先,使用 SET 命令,设置 haicoder.net 的值为 Redis。接着,使用 SETRANGE 命令,设置键 haicoder.net 从偏移量 3 开始的值为 Mongo ,返回了字符串长度为 8。
最后,使用 GET 命令,获取刚设置的键 haicoder.net 的值,为 RedMongo,可以看出原来的值被部分覆盖了。
Redis SETRANGE 命令用 value 参数覆写给定 KEY 所储存的字符串值,从偏移量 offset 开始。Redis SETRANGE 命令语法:
192.168.98.70:6379> SETRANGE KEY offset value