1. 程式人生 > >遠端訊息回撥控制同步鎖

遠端訊息回撥控制同步鎖

        新公司入職沒幾天,其他同事在做遠端服務鎖,要求多臺不同地點的伺服器中的服務相互搶鎖,保證服務執行順序。他們設計使用redis作為鎖載體,應用向redis註冊自己的鎖,排隊釋放鎖。但是遇到到個問題,如果使用迴旋鎖不斷的詢問伺服器鎖情況資源消耗巨大,急需要想其他方法進行優化。但是回撥又比較麻煩,因為一臺伺服器上的服務可能產生多個執行緒來槍鎖,redis具體回掉那臺機器通知並不能確定。

        作為一個新人我也提了下我的意見,因為以前做過C#一個東西,監聽埠等回撥(Remoting回撥),其實我們也能用這個概念去做遠端鎖,簡單的講先向redis提交鎖請求,並在本地建立一個socket監聽埠隨機唯一(每個需要鎖的執行緒佔用一個埠),將ip埠資訊與鎖一同傳送給redis,當redis發現一個使用者釋放了鎖使用ip及埠號通知下一個鎖請求者,鎖請求者建立的socket監聽到redis的回撥,執行鎖方法。

        這樣做優勢,1、執行緒可進度wait無需一直醒著等待毀掉  2、服務端壓力小沒有連結壓力