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