Redis SETRANGE命令

Redis SETRANGE命令教程

Redis SETRANGE 命令用 value 参数覆写给定 KEY 所储存的 字符串 值,从偏移量 offset 开始。不存在的 KEY 当作空白字符串处理。

SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 KEY 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节来填充。

注意能使用的最大偏移量是 2^29-1(536870911) ,因为 Redis 字符串的大小被限制在 512M 以内。如果需要使用比这更大的空间,可以使用多个 KEY 。

当生成一个很长的字符串时,Redis 需要分配内存空间,该操作有时候可能会造成服务器阻塞。

Redis SETRANGE命令详解

语法

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 不存在时,会被当空串处理

# 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 存在时,在指定位置设置值

# 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命令总结

Redis SETRANGE 命令用 value 参数覆写给定 KEY 所储存的字符串值,从偏移量 offset 开始。Redis SETRANGE 命令语法:

192.168.98.70:6379> SETRANGE KEY offset value