©
本文档使用
php.cn手册 发布
SETRANGE key offset value
自2.2.0起可用。
时间复杂度: O(1),不包括复制新字符串所用的时间。通常,这个字符串非常小,所以分期复杂度为O(1)。否则,复杂度为O(M),其中M是值参数的长度。
在指定的偏移量处重写存储在关键字处的整个字符串的部分值。如果偏移量大于键的当前字符串长度,则用零字节填充字符串以进行偏移量拟合。不存在的键被认为是空字符串,所以这个命令将确保它包含足够大的字符串以便能够在偏移量处设置值。
请注意,您可以设置的最大偏移量为229 -1(536870911),因为Redis字符串限制为512兆字节。如果你需要扩大到这个尺寸,你可以使用多个键。
警告:当设置最后一个可能的字节并且存储在密钥中的字符串值尚未保存字符串值或保存一个小字符串值时,Redis 需要分配所有可以阻塞服务器一段时间的中间内存。在2010年的 MacBook Pro上,设置字节数536870911(512MB分配)需要约300ms,设置字节数134217728(128MB分配)占用约80ms,设置位数33554432(32MB分配)占用约30ms,设置位数8388608(分配8MB)需要〜8ms。请注意,一旦完成第一次分配,对同一个密钥的 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> SETRANGE key2 6 "Redis" (integer) 11
redis> GET key2 "\u0000\u0000\u0000\u0000\u0000\u0000Redis"