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

    序言

    锁的性能之王: 缓存 > Zookeeper >= 数据库

    为什么需要分布式锁?

    锁就是保证多线程在竞态条件下对共享资源操作的一致性。

    //定义一个私有成员变量,用于Lock  
            private static object lockobj = new object();
            int sum = 10;
            void DoSomethingWithLock()
            {
                lock (lockobj)
                {
                    //需要锁定的代码块  
                    if (sum > 0)
                    {
                        Console.WriteLine(sum--);
                    }
                }
            }
    
           private void button46_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 100; i++)
                {
                    //模拟并发
                    Task.Factory.StartNew(() =>
                    {
                        DoSomethingWithLock();
                    });
                }
            }
    View Code

     

    基于数据库实现分布式锁

    增加version字段

    基于缓存Redis实现分布式锁

     Redis的SETNX分布式锁

     在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!

    实现思想

    • 获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此在释放锁的时候进行判断。
    • 获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。
    • 释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放。

    基于Zookeeper实现分布式锁

    利用 Zookeeper 的顺序临时节点,来实现分布式锁和等待队列。Zookeeper 设计的初衷,就是为了实现分布式锁服务的。

    资料

    https://blog.csdn.net/bingdianyuehua/article/details/53000909

    https://www.cnblogs.com/liuju150/p/ASPNET_MVC_Redis_Lock.html

  • 相关阅读:
    多线程-工作组模式
    iOS端架构、基本组成与使用说明
    iOS,Core Animation--负责视图的复合功能
    Container Views
    IOS UIView 01-View开始深入 绘制像素到屏幕上
    View Programming Guide for iOS
    UI绘图与信息、样式
    iOS绘图框架CoreGraphics分析
    iOS开发系列--打造自己的“美图秀秀”
    Array与NSArray关系
  • 原文地址:https://www.cnblogs.com/cnki/p/9091090.html
Copyright © 2011-2022 走看看