zoukankan      html  css  js  c++  java
  • 基于redis的分布式锁

    分布式环境下,数据一致性问题一直是一个比较重要的话题,而又不同于单进程的情况。分布式与单机情况下最大的不同在于其不是多线程而是多进程。多线程由于可以共享堆内存,因此可以简单的采取内存作为标记存储位置。而进程之间甚至可能都不在同一台物理机上,因此需要将标记存储在一个所有进程都能看到的地方。

    常见的分布式锁有三种

    1. 数据库乐观锁;

    2. 基于Redis的分布式锁;

    3. 基于ZooKeeper的分布式锁

    本次研究的是基于Redis的分布式锁,在讲redis锁之前,我们先了解两个redis命令

     SETNX


    将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。

    设置成功,返回 1 。
    设置失败,返回 0 。

    EXPIRE


    为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。

    这个超时不好演示,这里就不做演示了

    加锁:


     

    通过setnx指令,实现了锁的排他性,又设置了过期时间,防止这个锁长时间不释放

    释放:


     释放的过程就是把加锁时添加的数据删除

    关键代码如下

     删除之前有相应的条件判断


    以上就是redis的分布式锁

    参考:http://doc.redisfans.com/string/setnx.html

  • 相关阅读:
    Flink -- Java Generics Programming
    SpringBoot-annotation
    RDMA in CloudComputing
    ARM-IoT
    Netty
    TiDB, Distributed Database
    microkernel architecture
    Web网站的几个并发量级
    vtiger 下载地址
    php分布式缓存系统 Memcached 入门
  • 原文地址:https://www.cnblogs.com/xmzJava/p/8461613.html
Copyright © 2011-2022 走看看