SETRANGE
Syntax
SETRANGE key offset value
- Available since:
- 2.2.0
- Time complexity:
- O(1), not counting the time taken to copy the new string in place. Usually, this string is very small so the amortized complexity is O(1). Otherwise, complexity is O(M) with M being the length of the value argument.
- ACL categories:
-
@write
,@string
,@slow
,
覆盖存储在key中的字符串的一部分,从指定的偏移量开始,覆盖整个value的长度。 如果偏移量大于key中字符串的当前长度,字符串将用零字节填充以使offset适合。 不存在的键被视为空字符串,因此此命令将确保它持有一个足够大的字符串,以便能够在offset处设置value。
请注意,您可以设置的最大偏移量是2^29 -1(536870911),因为Redis字符串限制为512兆字节。如果您需要超过这个大小,可以使用多个键。
警告:当设置最后一个可能的字节并且存储在key中的字符串值尚未持有字符串值,或者持有一个小的字符串值时,Redis需要分配所有中间内存,这可能会阻塞服务器一段时间。
在2010年的MacBook Pro上,设置字节号536870911(512MB分配)需要约300毫秒,设置字节号134217728(128MB分配)需要约80毫秒,设置位号33554432(32MB分配)需要约30毫秒,设置位号8388608(8MB分配)需要约8毫秒。
请注意,一旦完成第一次分配,后续对相同key的SETRANGE
调用将不会有分配开销。
模式
感谢SETRANGE
和类似的GETRANGE
命令,您可以将Redis字符串用作具有O(1)随机访问的线性数组。在许多实际使用场景中,这是一种非常快速和高效的存储方式。
示例
基本用法:
零填充的示例: