redis客戶端驅動有很多,如ServiceStack.Redis,StackExchange.Redis等等,下面我使用ServiceStack.Redis為例,介紹一下在redis驅動中實現並發鎖的方式,並發就是多線程同時訪問和操作同一個資源,而對於redis來說,如果你多個線程共同修改一個key的value,這時就會出現並發,為了保證數據完整性,這時需要使用並發鎖,在各大語言中,都有自己的實現方法,無論的C,C#,java還是sqlserver都有這個概念!
using (IRedisClient RClient = Lind.DDD.RedisClient.RedisManager.GetClient()) { RClient.Add("zzlKey", 1); // 支持IRedisTypedClient和IRedisClient using (RClient.AcquireLock("lock")) { Console.WriteLine("並發鎖"); var counter = RClient.Get<int>("zzlKey"); RClient.Set("zzlKey", counter + 1); Console.WriteLine(RClient.Get<int>("mykey"));
Thread.Sleep(1000); } }
上面代碼只是簡單實現了並發鎖的功能,處理過程是先向redis服務端申請一把鎖lock,然后再發指令,我們知道using的作用是作用域的概念,即你的鎖在using以后,將會被釋放.
