2013-10-18 28 views
2

的關鍵是有可能SETNX具有價值的關鍵,並在單個命令在Redis的一個TTL設定值與TTL

我想實現在Redis的鎖定和http://redis.io/commands/hsetnx好像做的最好辦法那。它是原子的,如果一個鍵已經存在,則返回0。 HSETNX是否可能與TTL

HSETNX myhash mykey "myvalue" 10 

#and key expires after 10 seconds, and a subsequent HSETNX after 10 seconds returns a value 1 i.e. it behaves as if mykey is not present in myhash 

回答

4

主要問題是Redis不支持hashmaps中的字段過期。

您只能通過myhash調用EXPIRE來過期整個hashmap。

所以,你應該重新考慮使用普通的Redis字符串而不是hashmaps,因爲它們支持SETEX operation

,除非你想利用你的HashMap的myhash使用HGETALLHKEYSHVALS的優勢,它會正常工作:

SETEX mynamespace:mykey 10 "myvalue" 

mynamespace不是一個HashMap在這裏,它只是一個前綴,但在大多數情況下,它就像hashmaps一樣工作。唯一的區別是,沒有有效的方法來確定哪些密鑰存儲在給定的namespace中或通過單個命令獲取它們。

+0

是的,我只是注意到了SETEX。但SETNX的其他好處是,如果存在密鑰,則返回false。我不認爲SETEX會那樣做。 – user462455

+0

你是對的,但事實並非如此。 –