C#經過Redis實現分佈式鎖

Redis有三個最基本屬性來保證分佈式鎖的有效實現:git

  • 安全性: 互斥,在任什麼時候候,只有一個客戶端能持有鎖。
  • 活躍性A:沒有死鎖,即便客戶端在持有鎖的時候崩潰,最後也會有其餘客戶端能得到鎖,超時機制。
  • 活躍性B:故障容忍,只有大多數Redis節點時存活的,客戶端仍能夠得到鎖和釋放鎖。

使用StackExchange.Redis 實現起來簡單得很github

static void Lock()
        {
            Console.WriteLine("Start..........");
            var db = _redis.GetDatabase();
            RedisValue token = Environment.MachineName;
            //實際項目秒殺此處可換成商品ID
            if (db.LockTake("test", token, TimeSpan.FromSeconds(10)))
            {
                try
                {
                    Console.WriteLine("Working..........");
                    Thread.Sleep(5000);
                }
                finally
                {
                    db.LockRelease("test", token);
                }
            }

            Console.WriteLine("Over..........");
        }

最後附上GitHub地址:https://github.com/xiaopotian1990/RedisDemoredis

相關文章
相關標籤/搜索