zoukankan      html  css  js  c++  java
  • 分布式锁

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

  • 相关阅读:
    9、搜索 :ion-searchbar
    8、列表:ion-list
    uwp 的work project 的 取消闹钟
    long ? 的使用和理解
    uwp 中的音频开发
    uwp 之语音朗读
    uwp 语音指令
    C# 泛型(Generic)
    C# 排序列表(SortedList)
    C# 反射(Reflection)
  • 原文地址:https://www.cnblogs.com/fblogs/p/13034285.html
Copyright © 2011-2022 走看看