Memcached 和 Redis 分布式鎖方案__緩衝

來源:互聯網
上載者:User

分布式緩衝,能解決單台伺服器記憶體不能無限擴張的瓶頸。在分布式緩衝的應用中,會遇到多個用戶端同時爭用的問題。這個時候,需要用到分布式鎖,得到鎖的用戶端才有操作許可權。

Memcached 和 Redis 是常用的分布式緩衝構建方案,下面列舉下基於Memcached 和 Redis 分布式鎖的實現方法。

Memcached 分布式鎖

Memcached 可以使用 add 命令,該命令只有KEY不存在時,才進行添加,或者不會處理。Memcached 所有命令都是原子性的,並發下add 同一個KEY ,只會一個會成功。

利用這個原理,可以先定義一個 鎖 LockKEY ,add 成功的認為是得到鎖。並且設定[到期逾時] 時間,保證宕機後,也不會死結

在具體操作完後,判斷是否此次操作已逾時。如果逾時則不刪除鎖,如果不逾時則刪除鎖。

虛擬碼:

 1          if (mc.Add("LockKey", "Value", expiredtime)) 2             { 3                 //得到鎖 4                 try 5                 { 6                     //do business  function 7  8                     //檢查逾時 9                     if (!CheckedTimeOut())10                     {11                         mc.Delete("LockKey");12                     }13                 }14                 catch (Exception e)15                 {16                     mc.Delete("LockKey");17                 }18                19             }

 

Redis 分布式鎖

Redis  沒有add 命令,但有SETNX(SET if Not eXists)若給定的 key 已經存在,則 SETNX不做任何動作。設定成功,返回 1 。設定失敗,返回 0 。

SETNX 命令不能設定到期時間,需要再使用 EXPIRE 命令設定到期時間。

虛擬碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.