?
This document uses PHP Chinese website manual Release
SETRANGE key offset value
自2.2.0起可用。
時間復(fù)雜度: O(1),不包括復(fù)制新字符串所用的時間。通常,這個字符串非常小,所以分期復(fù)雜度為O(1)。否則,復(fù)雜度為O(M),其中M是值參數(shù)的長度。
在指定的偏移量處重寫存儲在關(guān)鍵字處的整個字符串的部分值。如果偏移量大于鍵的當前字符串長度,則用零字節(jié)填充字符串以進行偏移量擬合。不存在的鍵被認為是空字符串,所以這個命令將確保它包含足夠大的字符串以便能夠在偏移量處設(shè)置值。
請注意,您可以設(shè)置的最大偏移量為229 -1(536870911),因為Redis字符串限制為512兆字節(jié)。如果你需要擴大到這個尺寸,你可以使用多個鍵。
警告:當設(shè)置最后一個可能的字節(jié)并且存儲在密鑰中的字符串值尚未保存字符串值或保存一個小字符串值時,Redis 需要分配所有可以阻塞服務(wù)器一段時間的中間內(nèi)存。在2010年的 MacBook Pro上,設(shè)置字節(jié)數(shù)536870911(512MB分配)需要約300ms,設(shè)置字節(jié)數(shù)134217728(128MB分配)占用約80ms,設(shè)置位數(shù)33554432(32MB分配)占用約30ms,設(shè)置位數(shù)8388608(分配8MB)需要?8ms。請注意,一旦完成第一次分配,對同一個密鑰的 SETRANGE 后續(xù)調(diào)用將不會產(chǎn)生分配開銷。
感謝 SETRANGE 和類似的 GETRANGE 命令,您可以使用 Redis 字符串作為具有O(1)隨機訪問的線性陣列。這是許多真實世界使用案例中非??焖俸透咝У拇鎯臻g。
整數(shù)回復(fù):命令修改后的字符串長度。
基本用法:
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"