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

  • 相关阅读:
    农历
    成熟度模型-数据安全
    vscode升级go插件
    关于作者
    SpringBoot入门十二(整合之项目打包部署运行)
    SpringBoot入门十一(整合之RedisTemplate的使用)
    SpringBoot入门十(整合之Junit测试)
    SpringBoot入门九(整合之通用mapper)
    SpringBoot入门八(整合之mybatis)
    SpringBoot入门七(整合之事务和连接池)
  • 原文地址:https://www.cnblogs.com/fblogs/p/13034285.html
Copyright © 2011-2022 走看看