分布式锁

1. 什么是分布式锁?

分布式锁:进程锁(可以在查询和更新数据库的时候都加锁)

分布式就是SOA,面向分布式对象的架构

2. 为什么使用分布式锁:数据安全

保持数据一致性的是分布式事务

3.应用分布式的场景:

3.1 redis

3.2 redis客户端,StackExchange Redis

3.3 业务

4.分布式锁4要素

4.1 锁名

4.2 加锁操作

4.3 解锁操作

4.4 锁超时时间

public class RedisLock

{

private ConnectionMultiplexer connectionMultiplexer = null;

private IDataRedis database = null;

public RedisLock()

{

connectionMultiplexer = new ConnectionMultiplexer .Connect("localhost:6379");

dataBase = connectionMultiplexer.GetDatabase(0);

}

///<Summary>

///加锁

///1. key, 锁名

///2. value, 谁加了这把锁-->防止所被其他线程释放掉

///3. 锁的超时时间,防止死锁

///</Summary>

public void Lock()

{

//加锁

//如果加锁失败,继续获取锁,会有无限次失败,所以要用死循环

while(true)

{

bool flag = database.LockTake("秒杀锁", Thread.CurrentThread.ManagedThreadId, TimeSpan.FromSeconds(10));

if(flag)

{

 break;

}

//无限死循环可能导致系统宕机,需要休眠一下

Thread.Sleep(200);

}

}

///<Summary>

///解锁

///</Summary>

public void UnLock()

{

//1. 解锁,参数是加锁的时候的锁的名字,和加这个锁的线程Id

dataBase.LockRelease("skill_locks", Thread.CurrentThread.ManagedThreadId);

//2. 关闭一下资源

connectionMultiplexer.Close();

}

}

5.Redis集群中锁失败----》RedLock红锁算法