分布式锁

Posted fblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式锁相关的知识,希望对你有一定的参考价值。

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红锁算法

以上是关于分布式锁的主要内容,如果未能解决你的问题,请参考以下文章

Redis实现分布式锁与Zookeeper实现分布式锁区别

分布式锁,及Redis实现分布式锁

分布式锁

高并发架构系列:什么是分布式锁?Redis实现分布式锁详解

Redisson分布式锁设计方案

Redis | 黑马点评 + 思维导图分布式锁