成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Redis 如何實現分布式鎖?

數據庫 Redis
Redis 作為一個獨立的三方系統,其優勢是天生可以實現分布式鎖。它實現分布式鎖是通過 setnx 來實現的,然而只有 nx(not exists)可能會發生死鎖的問題,所以我們最終實現死鎖應該使用 set nx ex 的方式來實現。

首先來說 Redis 作為一個獨立的三方系統,其天生的優勢就是可以作為一個分布式系統來使用,因此使用 Redis 實現的鎖都是分布式鎖,理解了這個概念才能看懂本文所說的內容。

分布式鎖的示意圖,如下所示:

圖片

分布式鎖實現

使用 Redis 實現分布式鎖,可以通過 setnx(set if not exists)命令實現,當我們使用 setnx 創建鍵值成功時,則表明加鎖成功,否則既代碼加鎖失敗。因為 Redis 主線程是單線程運行的,所以也不會有同時加鎖成功的情況。實現命令如下:

127.0.0.1:6379> setnx lock true
(integer) 1 #創建鎖成功
#邏輯業務處理...
127.0.0.1:6379> del lock
(integer) 1 #釋放鎖

當我們重復加鎖時執行結果如下:

127.0.0.1:6379> setnx lock true # 第一次加鎖
(integer) 1
127.0.0.1:6379> setnx lock true # 第二次加鎖
(integer) 0

從上述命令中可以看出,我們可以使用執行的結果是否為 1 來判斷加鎖是否成功。

分布鎖問題

然而,使用 setnx 實現分布鎖有一個【死鎖問題】,就是當加鎖的線程(或應用)掉電或崩潰之后,其他線程只能無限等待下去的問題。

此時,我們解決死鎖問題可以通過添加設置鎖的過期時間來實現。也就是 setnx 和 expire 配合使用,在 Redis 2.6.12 版本之后,新增了一個強大的功能,我們可以使用一個原子操作也就是一條命令來執行 setnx 和 expire 操作了,實現命令如下:

127.0.0.1:6379> set lock true ex 30 nx
OK #創建鎖成功
127.0.0.1:6379> set lock true ex 30 nx
(nil) #在鎖被占用的時候,企圖獲取鎖失敗

其中 ex 為設置超時時間, nx 為元素非空判斷,用來判斷是否能正常使用鎖的。

小結

Redis 作為一個獨立的三方系統,其優勢是天生可以實現分布式鎖。它實現分布式鎖是通過 setnx 來實現的,然而只有 nx(not exists)可能會發生死鎖的問題,所以我們最終實現死鎖應該使用 set nx ex 的方式來實現。

小思考:當設置了過期時間之后,Redis 實現分布式依然會有一個小小的問題,有人知道這個問題和解決方案嗎?歡迎評論區寫出你的答案。此文章點贊過 100,我會給出標準答案。

本文已收錄到我的面試小站 www.javacn.site,其中包含的內容有:Redis、JVM、并發、并發、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設計模式、消息隊列等模塊。

責任編輯:武曉燕 來源: Java中文社群
相關推薦

2024-04-01 05:10:00

Redis數據庫分布式鎖

2024-10-07 10:07:31

2022-01-06 10:58:07

Redis數據分布式鎖

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2019-06-19 15:40:06

分布式鎖RedisJava

2024-01-02 13:15:00

分布式鎖RedissonRedis

2021-11-01 12:25:56

Redis分布式

2022-08-11 18:27:50

面試Redis分布式鎖

2020-07-30 09:35:09

Redis分布式鎖數據庫

2020-07-15 16:50:57

Spring BootRedisJava

2023-03-01 08:07:51

2023-01-13 07:39:07

2019-12-25 14:35:33

分布式架構系統

2023-10-11 09:37:54

Redis分布式系統

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2024-11-28 15:11:28

2024-02-20 09:50:02

Redis分布式

2022-09-19 08:17:09

Redis分布式

2020-11-16 12:55:41

Redis分布式鎖Zookeeper

2022-06-16 08:01:24

redis分布式鎖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久图文区 | 日韩精品免费一区二区在线观看 | 精品久久久久久久久久久 | 看a网站 | 亚洲一区二区三区高清 | 中文字幕欧美日韩 | 91大片| 真人毛片 | 九九天堂网 | 天天综合成人网 | 国产精品精品视频一区二区三区 | 久久久精品久久 | 午夜精品视频 | 午夜影视大全 | 亚洲三区视频 | 91久久国产综合久久 | 台湾佬成人网 | 亚洲自拍偷拍欧美 | 成人免费视频一区二区 | 91精品国产综合久久久久久丝袜 | 日韩精品一区二区三区视频播放 | 国产综合在线视频 | 欧美日韩一本 | 国产一区二区三区免费观看视频 | 99久久久久久久久 | 色爱区综合 | 国产精品久久久久久久久久免费看 | av在线播放网 | 成人在线视频观看 | 成人h免费观看视频 | 国产视频一区二区 | 久久夜视频 | 亚洲精品在线视频 | 中国美女av | 成人欧美一区二区三区白人 | 成人aaa视频 | 成人免费视屏 | 成在线人视频免费视频 | 日韩在线中文字幕 | 蜜桃在线播放 | 欧美在线视频一区二区 |