?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
SET key value [EX seconds] [PX milliseconds] [NX|XX]
自1.0.0起可用。
時(shí)間復(fù)雜度: O(1)
設(shè)置key
為保存字符串value
。如果key
已經(jīng)保存了一個(gè)值,則不管其類型如何,都會(huì)被覆蓋。在 SET 操作成功之后,任何以前與密鑰關(guān)聯(lián)的生存時(shí)間都將被丟棄。
從 Redis 開始2.6.12 SET 支持一組修改其行為的選項(xiàng):
EX
秒 - 設(shè)置指定的到期時(shí)間,以秒為單位。
PX
毫秒 - 設(shè)置指定的到期時(shí)間,以毫秒為單位。
NX
- 只有在密鑰不存在的情況下才能設(shè)置密鑰。
XX
- 只有在鑰匙已經(jīng)存在的情況下才能設(shè)置。
注意:由于 SET 命令選項(xiàng)可以替代 SETNX,SETEX,PSETEX,因此在未來的 Redis 版本中,這三個(gè)命令可能會(huì)被棄用并最終被刪除。
簡(jiǎn)單字符串回復(fù):OK
如果 SET 正確執(zhí)行??栈貜?fù):如果由于用戶指定了NX
or XX
選項(xiàng)但未滿足條件而未執(zhí)行 SET 操作,則返回 Null Bulk Reply 。
redis> SET mykey "Hello" "OK"
redis> GET mykey "Hello"
注意:以下模式不推薦使用Redlock算法,該算法實(shí)現(xiàn)起來稍微復(fù)雜一些,但提供了更好的保證并具有容錯(cuò)性。
該命令SET resource-name anystring NX EX max-lock-time
是使用Redis實(shí)現(xiàn)鎖定系統(tǒng)的簡(jiǎn)單方法。
如果上述命令返回OK
(或者如果命令返回 Nil 后一段時(shí)間后重試),則客戶端可以獲取鎖,并使用 DEL 刪除鎖。
鎖定將在到期時(shí)間后自動(dòng)釋放。
可以使這個(gè)系統(tǒng)更健壯地修改解鎖模式,如下所示:
設(shè)置一個(gè)不可猜測(cè)的大型隨機(jī)字符串(稱為標(biāo)記),而不是設(shè)置固定字符串。
不要使用 DEL 來釋放鎖定,而是發(fā)送一個(gè)只在值匹配時(shí)才刪除密鑰的腳本。
這樣可以避免客戶端在過期時(shí)間后嘗試釋放鎖,從而刪除由稍后獲取鎖的另一個(gè)客戶端創(chuàng)建的密鑰。
解鎖腳本的一個(gè)示例與以下內(nèi)容類似:
if redis.call("get",KEYS[1]) == ARGV[1]then return redis.call("del",KEYS[1])else return 0end
該腳本應(yīng)該用來調(diào)用 EVAL ...script... 1 resource-name token-value