redis分佈式鎖

setnx

SETNX+EXPIRE

$redis->multi();
$redis->setNX($key, $value);
$redis->expire($key, $ttl);
$redis->exec();

如果可能出現死鎖:那麼可以使用value值爲時間戳+過期時間模式,在下一個執行獲取鎖是,如果拿不到鎖,那麼判斷時間是否有真實過期,若過期,刪除鎖,再重新獲得


SET


SET key value [EX seconds] [PX milliseconds] [NX|XX]

將字符串值 value 關聯到 key 。

***如果 key 已經持有其他值, SET 就覆寫舊值,無視類型。

可選參數

SET 參數說明:

EX second :設置鍵的過期時間爲 second 秒。 SET key value EX second 效果等同於 SETEX key second value 。
PX millisecond :設置鍵的過期時間爲 millisecond 毫秒。 SET key value PX millisecond 效果等同於 PSETEX key millisecond value 。
NX :只在鍵不存在時,纔對鍵進行設置操作。 SET key value NX 效果等同於 SETNX key value 。
XX :只在鍵已經存在時,纔對鍵進行設置操作。
因爲 SET 命令可以通過參數來實現和 SETNX 、 SETEX 和 PSETEX 三個命令的效果,所以將來的 Redis 版本可能會廢棄並最終移除 SETNX 、 SETEX 和 PSETEX 這三個命令。

事例

SET k1 v1 NX PX 30000    key不存在時生效,設置過期時間爲30000毫秒
SET k1 v1 NX EX 30    key不存在時生效,設置過期時間爲30秒
SET k1 v1 XX EX 300    key * 存在 *時生效,設置過期時間爲300秒
SET k1 v1    覆寫舊值,無視類型,如有TTL 將被清除。任何key都將回歸普通key,v形式
返回值:
在 Redis 2.6.12 版本以前, SET 命令總是返回 OK 。

從 Redis 2.6.12 版本開始, SET 在設置操作成功完成時,才返回 OK 。
如果設置了 NX 或者 XX ,但因爲條件沒達到而造成設置操作未執行,那麼命令返回空批量回復(NULL Bulk Reply)。

使用SET代替SETNX ,相當於SETNX+EXPIRE實現了原子性,不必擔心SETNX成功,EXPIRE失敗的問題!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章