• Redis实现分布式锁的几种方式


    为什么要加锁

    如果多个线程同时访问共享资源时,我们通常需要锁的机制,保证在某个时刻,只有一个线程可以对这个资源进行操作,其他线程需要等待这个锁的释放才能继续处理。主要保证数据一致性
    synchronized锁行不行?
    在单机应用,可以使用,
    但是在分布式系统中,因为是多个机器,不能使用线程级别的jvm锁,只能借助其他中间件来实现分布式锁,
    分布式锁的三个属性:

    • 互斥性(Mutual Exclusion):同一时刻只有一个客户端持有锁
    • 避免死锁(Dead lock free):设置锁的存活时间(Time of Live)ttl
    • 容错(Fault tolerance):避免单机故障,锁服务要有一定的容错性

    一、SETNX

    Redis Setnx (SET IF NOT EXISTS)
    命令如下
    > SETNX KEY_NAME VALUE
    返回结果
    如果设置成功(不存在这个key),返回1,如果设置失败(已经存在这个key),返回0

    二、SET

    > SET KEY VALUE
    返回结果
    设置成功返回OK

    在实现方式上可以使用RedisTemplate的setIfAbsent,

    如果不存在(设置成功)返回True,如果存在(设置失败)返回False

    三、INCR或INCRBY、INCRBYFLOAT

    命令:INCR KEY
    > INCRBY KEY INCREMENT
    返回结果
    如果使用incr,每次自增量为1
    返回结果为增量之后的结果
    可以通过返回结果是否为1来进行加锁


  • 相关阅读:
    linux virtualbox
    cboard安装
    test
    kafka安装
    OLAP解释
    php 连接数据库直接转成json格式
    hive学习
    mariadb修改密码
    mariadb anzhuang
    IDEA12 中写hql语句编译器莫名报错
  • 原文地址:https://www.cnblogs.com/LiuFqiang/p/16650870.html
Copyright © 2020-2023  润新知