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

    为什么需要分布式锁?

      当两个应用(进程)并发修改共享数据时,如何确保数据的一致性?

      JDK提供的锁(Synchronize/Lock)仅支持进程内的线程并发,而无法保证进程间的并发。

      此时就需要使用分布式锁。

    分布式锁的要求:

      1、排他性

      2、高可用(分布式是高可用的,所有必须具备高性能)

    分布式锁的实现方式:

      1、基于数据库实现

        a、乐观锁,使用版本号version来进行实现。

        b、悲观锁,使用for update 来实现,select * from table_name where id = xxx for update; 在InnoDB中,只有id加了索引才会是行级锁,否则为表级锁。当这条语句能获取到记录时,代表获得了锁。

      2、基于Redis实现

        SET key_name value_text NX PX 100 ; SET语句是原子操作的,上面的语句NX代表只有该key_name不存在时,才进行创建。

      3、基于zookeeper的实现

        原理是使用zk的临时有序节点来实现分布式锁。

        当客户端需要加锁时,就在zk上的某个节点目录下创建一个唯一的临时有序节点,然后判断自己是否就是该节点中序号最小的一个,如果是则获得了锁。如果不是则对序号最小的那个节点调用exist()方法,对其注册监听事件,当节点被删除,再判断一次自己的节点是否是序号最小的那个,依次操作指导能够获取分布式锁。

    总结:

      由上面三种实现方式,可以推出:仅zk的实现支持有序操作  

  • 相关阅读:
    一个asp.net MVC 的分页代码
    JavaScript教程:JavaScript如何判定用户浏览器类型和版本号?
    CutyCapt A Qt WebKit Web Page Rendering Capture Utility
    Top 10 Algorithms in Data Mining
    a c++ bloger
    设置MYSQL允许用IP访问
    QtWebKit Module
    kubuntudesktop nearly 700m,so big
    Wt, C++ Web Toolkit Introduction
    硅谷、纽约、伦敦如何演绎世界三大科技中心
  • 原文地址:https://www.cnblogs.com/chen--biao/p/10025061.html
Copyright © 2011-2022 走看看