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

  • 相关阅读:
    Docker Weave 命令整理
    Docker Weave 介绍 or 工作原理
    Docker Macvlan 应用部署
    Docker Macvlan 介绍 or 工作原理
    Linux Centos 7.4 内核升级
    Docker Overlay 应用部署
    Docker Overlay 工作原理
    Docker Overlay 介绍
    Openfire:安装指南
    Android WebRTC 音视频开发总结(一)
  • 原文地址:https://www.cnblogs.com/xmzJava/p/8461613.html
Copyright © 2011-2022 走看看