舒畅 发表于 2017-12-21 20:21:13

C#通过Redis实现分布式锁

  Redis有三个最基本属性来保证分布式锁的有效实现:


[*]安全性: 互斥,在任何时候,只有一个客户端能持有锁。
[*]活跃性A:没有死锁,即使客户端在持有锁的时候崩溃,最后也会有其他客户端能获得锁,超时机制。
[*]活跃性B:故障容忍,只有大多数Redis节点时存活的,客户端仍可以获得锁和释放锁。
  使用StackExchange.Redis 实现起来简单得很
  

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/RedisDemo
页: [1]
查看完整版本: C#通过Redis实现分布式锁