SETRANGE

语法
SETRANGE key offset value
可用版本
Redis 开源版 2.2.0
时间复杂度
O(1),不包括就地复制新字符串所花费的时间。通常,此字符串非常小,因此均摊复杂度为 O(1)。否则,复杂度为 O(M),其中 M 是 value 参数的长度。
ACL 类别
@write, @string, @slow,

覆盖存储在 *key* 处的字符串的一部分,从指定的 offset 开始,覆盖 value 的整个长度。如果 offset 大于 *key* 处当前字符串的长度,则字符串将用零字节填充,以使 offset 位置可以写入。不存在的 key 被视为空字符串,因此该命令将确保它持有一个足够大的字符串,以便能够在 offset 位置设置 value。

请注意,您可以设置的最大 offset 为 2^29 -1 (536870911),因为 Redis 字符串被限制为 512 兆字节。如果需要超出此大小,可以使用多个 key。

**警告**:当设置最后一个可能的字节,并且存储在 *key* 处的字符串值尚未持有字符串值或持有很小的字符串值时,Redis 需要分配所有中间内存,这可能会阻塞服务器一段时间。在 2010 年的 MacBook Pro 上,设置字节号 536870911(512MB 分配)需要约 300 毫秒,设置字节号 134217728(128MB 分配)需要约 80 毫秒,设置位号 33554432(32MB 分配)需要约 30 毫秒,设置位号 8388608(8MB 分配)需要约 8 毫秒。请注意,一旦完成首次分配,对同一 *key* 的后续 SETRANGE 调用将不会产生分配开销。

模式

借助 SETRANGE 和类似的 GETRANGE 命令,可以将 Redis 字符串用作具有 O(1) 随机访问的线性数组。这在许多实际用例中是一种非常快速高效的存储方式。

示例

基本用法

SET key1 "Hello World" SETRANGE key1 6 "Redis" GET key1

零字节填充示例

SETRANGE key2 6 "Redis" GET key2

RESP2/RESP3 回复

整数回复:命令修改后字符串的长度。
评价本页
回到顶部 ↑