# SETRANGE

从指定的偏移量开始,在key处覆盖字符串的一部分

语法

SETRANGE key offset value
  • 可用版本:

    2.2.0

  • 时间复杂度:

    O(1),不计算复制新字符串所需的时间。通常,该字符串非常小,因此摊销复杂度为 O(1)。否则,复杂度为 O(M),其中 M 是 value 参数的长度。

  • ACL 类别:

    @write, @string, @slow

覆盖存储在key的部分字符串,从指定的偏移量开始,覆盖**value的整个长度。如果偏移量大于key处字符串的当前长度,则用零字节填充字符串以使偏移量适合。不存在的键被视为空字符串,因此此命令将确保它包含一个足够大的字符串,以便能够在offset处设置**值

请注意,您可以设置的最大偏移量为 2^29 -1 (536870911),因为 Redis 字符串限制为 512 兆字节。如果您需要超过这个大小,您可以使用多个键。

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

# 模式

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

# 返回

整数:被命令修改后的字符串长度。

# 例子

基本用法:

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

零填充示例:

redis> SETRANGE key2 6 "Redis"
(integer) 11
redis> GET key2
"Redis"
redis> 

# 反馈

如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。

Last Updated: 4/18/2023, 8:45:33 AM