SETRANGE 系列
语法
SETRANGE key offset value
- 从以下位置开始可用:
- 2.2.0
- 时间复杂度:
- O(1),不计算就地复制新字符串所花费的时间。通常,此字符串非常小,因此摊销复杂度为 O(1)。否则,complexity 为 O(M),其中 M 是 value 参数的长度。
- ACL 类别:
-
@write
,@string
,@slow
,
覆盖存储在 key 处的字符串的一部分,从指定的偏移量开始, 对于值的整个长度。 如果偏移量大于 key 处字符串的当前长度,则 string 填充零字节以使偏移量合适。 不存在的键被视为空字符串,因此此命令将使 确保它包含一个足够大的字符串,以便能够在 offset 处设置值。
请注意,您可以设置的最大偏移量为 2^29 -1 (536870911),因为 Redis 字符串限制为 512 MB。 如果需要增长到超过此大小,可以使用多个键。
警告: 当设置最后一个可能的字节并且存储在 key 中的字符串值尚未保存字符串值,或者保存较小的字符串值时,Redis
需要分配所有中间内存,这可能会阻塞服务器一些
时间。
在 2010 款 MacBook Pro 上,设置字节号 536870911(512MB 分配)需要
~300 毫秒,设置字节号134217728(128MB 分配)需要 ~80 毫秒,设置
位号 33554432(32MB 分配)需要 ~30 毫秒,设置位号 8388608
(8MB 分配)需要 ~8 毫秒。
请注意,完成第一次分配后,对SETRANGE
为
同一键不会有分配开销。
模式
由于SETRANGE
和类似的GETRANGE
命令中,您可以使用 Redis
strings 作为具有 O(1) 随机访问的线性数组。
在许多实际使用案例中,这是一种非常快速和高效的存储。
例子
基本用法:
零填充示例: