php redis lua實現分布式鎖

2021-08-06 04:25:03 字數 789 閱讀 2597

以下是我在工作中用到的類,redis加鎖兩種方式,解鎖為了保證原子性所以只用lua+redis的方式

缺陷:雖然死鎖問題解決了,但業務執行時間超過鎖有效期還是存在多客戶端加鎖問題。

不過,這個類已經滿足了我現在的業務需求

更優的解決方案可以參考以下兩篇文章:

(redlock的演算法描述)

**實現:

class

redislock

}public

function

lock

($key, $expire = 5)

// 獲取上乙個鎖的到期時間

$currentlocktime = $this->_redis->get($key);

if ($currentlocktime

< $now)

}return

false;

}public

function

lockbylua

($key, $expire = 5)

public

function

unlock

($key)

}private

function

_eval

($script, array $params, $keynum = 1)

}$redislock = new redislock();

$key = 'lock';

if ($redislock->lockbylua($key))

zabbix proxy 實現分布監控

在日常運維工作中,難免會遇到這樣或那樣的故障,如何能在第一時間發現故障,並及時定位故障原因,保證業務不受影響,我想這應該是做好乙個運維必須要掌握的技能。但人力不可能實時掌控系統的變化,於是監控系統應運而生,監控便是運維的眼睛,把監控和效能管理做好後,運維就是一件很輕鬆的事情。目前比較流行的開源監控工...

thinkPHP實現MemCache分布式快取功能

兩天在研究memcache分布式快取的問題時,發現thinkphp其實並不支援分布式快取功能,這可以從官方提供的cachememcache.class.php檔案中看到 if empty options func options persistent pconnect connect this ex...

Matlab實現正態分佈

1 使用matlab畫出正態分佈的概率密度函式影象。x 10 0.01 10 y normpdf x,0,1 正態分佈函式。figure axes1 axes pos 0.1 0.1 0.85 0.85 plot x,y set axes1,ylim 0.01 0.43 xlim 3 3 圖1 2 ...