首页 > 数据库 >Redis实现分布式锁的几种方式

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

时间:2022-09-02 18:25:07浏览次数:69  
标签:返回 SET 设置 Redis 几种 线程 KEY 分布式

为什么要加锁

如果多个线程同时访问共享资源时,我们通常需要锁的机制,保证在某个时刻,只有一个线程可以对这个资源进行操作,其他线程需要等待这个锁的释放才能继续处理。主要保证数据一致性
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来进行加锁


标签:返回,SET,设置,Redis,几种,线程,KEY,分布式
From: https://www.cnblogs.com/LiuFqiang/p/16650870.html

相关文章

  • Redis集群模式哈希槽rename问题
    (error)ERR'RENAME'commandkeysmustinsameslot一、介绍我们先来看基本的介绍RedisRename命令用于修改key的名称。1、语法redisrename命令的基本用法如......
  • Redis服务端命令请求处理
    命令处理流程1.Redis单线程单进程通过IO复用从文件事件中选出已经就绪的命令放入输入缓存区querybuffer2.一个个取出querybuffer里的命令进行解析,解析argv和argc3.通过a......
  • SpringBoot整合Redis
    14、SpringBoot整合Redis14.1、概述SpringBoot操作数据库:spring-data,jpa,jdbc,mongodb,redisSpringData也是和SpringBoot齐名的项目!说明:在SpringBoot2.x之后,原来使用的jed......
  • Linux软件包常见的几种下载、安装方法
    在线源下载和安装如果服务器是处于在线状态,在使用默认下载源是外国的情况下,安装更新软件包往往会比较痛苦的存在,下载了许久来一个超时就gg了。国内有许多镜像源,完美的解决......
  • 4. 简述redis集群的实现原理
    4. 简述redis集群的实现原理  4.1RedisCluster工作原理 在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master,从而可以......
  • 5、基于redis5的redis cluster部署
    5、基于redis5的rediscluster部署   5.1原生命令手动部署过程在所有节点安装redis,并配置开启cluster功能各个节点执行meet,实现所有节点的相互通信为各个m......
  • 1、简述redis特点及其应用场景
    1、简述redis特点及其应用场景 1.1redis特点速度快:10WQPS,基于内存,C语言实现单线程持久化支持多种数据结构支持多种编程语言功能丰富:支持Lua脚本,发布订阅......
  • 2. 对比redis的RDB、AOF模式的优缺点
    2. 对比redis的RDB、AOF模式的优缺点 2.1 redis的RDB模式2.1.1RDB模式工作原理  RDB(RedisDataBase):基于时间的快照,其默认只保留当前最新的一次快照,特点......
  • 3.实现redis哨兵,模拟master故障场景
    3.实现redis哨兵,模拟master故障场景实验拓扑图  3.1哨兵的准备实现主从复制架构哨兵的前提是已经实现了一个redis的主从复制的运行环境,从而实现一个一主两从基于......
  • redis异地多活
    what:异地多活:简单来说,就是在不同地域建立数据中心,每个数据中心在日常使用中都需要正常接入业务流量,做业务支撑。异地多活,也属于分布式架构的系统。......