伺服器分布式鎖

2021-07-04 16:31:50 字數 816 閱讀 1708

多程序處理資料的時候難免會出現資料不一致問題,例如有乙個程序正在處理資料,還沒有來得及寫入,另乙個程序已經在讀,導致拿到的資料不是最新的。應該要保證第乙個程序更新完後再讀取才不會出錯,要解決這個問題就要進行類似乙個原子操作了,給執行的**加乙個分布式鎖。

下面用ssdb實現一把分布式鎖:

bool ssdblock(const string& key, uint32_t last)

string lasttime = util::tostring(last);

int count = 5;

while (true && count > 0)

}usleep( 300000 * (6 - count) );

--count;

}return count > 0;

}void ssdbunlock(const string& key)

status status = client->del(key);

int count = 3;

while ( !status.ok() && count > 0)

}上面用incr自增來實現鎖,也可以通過setnx命令來實現,但c++客戶端api現在還不支援該命令的執行。

用expire命令設定乙個有生存週期的key值,保證超時後其它程序可以獲得鎖。

除了可以用ssdb實現分布式鎖,也可以通過redis和mysql實現

redis的實現方式和上面的ssdb的方式一樣

mysql可以用update語句來實現(設定乙個時間字段,每次更新都寫入當前的時間,確保超時控制),具體實現方式留給讀者思考了。

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

併發伺服器,分布式伺服器(結構)

什麼是分布式系統架構 分布式系統架構簡單的說是執行在多個處理器上的軟體構架設計。分布式系統是建立在網路之上的軟體系統。正是因為軟體的特性,所以分布式系統具有高度的內聚性和透明性。網路和分布式系統之間的區別更多的在於高層軟體 特別是作業系統 而不是硬體。內聚性是指每乙個資料庫分布節點高度自治,有本地的...

分布式伺服器技術選型

附 幾種反向 伺服器比較 整體上看rabbitmq的綜合性能會更佳一些 附 mq框架的比較 附 三大web伺服器對比分析 apache lighttpd,nginx 附 常用的分布式快取的對比 附 分布式檔案系統mfs ceph glusterfs lustre的對比 附 分布式搜尋和分析引擎對比 ...