锁是多线程编程中的一个重要概念,它是保证多线程并发时顺利执行的关键。我们通常所说的“锁”是指程序中的锁,也就是单机锁,例如 Java 中的 Lock 和 ReadWriteLock 等,而所谓的分布式锁是指可以使用在多机集群环境中的锁。

我们本文的面试题是,使用 Redis 如何实现分布式锁?

## 典型回答

首先来说 Redis 作为一个独立的三方系统(通常被作为缓存中间件使用),其天生的优势就是可以作为一个分布式系统来使用,因此使用 Redis 实现的锁都是分布式锁,理解了这个概念才能看懂本文所说的内容。

分布式锁的示意图,如下所示:

使用 Redis 实现分布式锁可以通过以下两种手段来实现:

  • 使用 incr 方式实现;
  • 使用 setnx 方式实现。

有人可能会奇怪 incr 不是用来实现数值 +1 操作的吗?用它怎么来实现分布式锁呢?

我们下来看 incr 的使用示例:

127.0.0.1:6379> set key 1 # 新增一个键值
OK
127.0.0.1:6379> incr key # 执行加 1 操作
(integer) 2
127.0.0.1:6379> get key # 查询键值
"2"

从以上代码可以看出使用 incr 可以实现数值 +1,那怎么用它来实现分布式锁呢?

其实原理也很简单,我们每次的加锁(上锁)都使用 incr 命令,如果执行的结果为 1 的

Redis 如何实现分布式锁?相关推荐

  1. Redlock——Redis集群分布式锁

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 分布式锁是一种非常有用的技术手段.实现高效的分布式锁有三个属性需要考虑: 安全属性:互斥,不管什么时候,只有一个客户端持有锁 ...

  2. redistemplate分布式锁实现_基于 Redis SETNX 实现分布式锁

    环境与配置 Redis 任意版本即可 SpringBoot 任意版本即可,但是需要依赖 spring-boot-starter-data-redis <dependency><gro ...

  3. 阿里JAVA面试题剖析:一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?...

    面试原题 一般实现分布式锁都有哪些方式?使用 redis 如何设计分布式锁?使用 zk 来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高? 面试官心理分析 其实一般问问题,都是这么问的,先 ...

  4. Redis 集群分布式锁与 API 网关分布式限流

    https://www.infoq.cn/article/FoQGIk*BzdQWJJ0tKqrJ Redis 集群的历史 Redis 在 3.0 前一般有两种集群方案,一是 proxy(Twempr ...

  5. Redis进阶- Redisson分布式锁实现原理及源码解析

    文章目录 Pre 用法 Redisson分布式锁实现原理 Redisson分布式锁源码分析 redisson.getLock(lockKey) 的逻辑 redissonLock.lock()的逻辑 r ...

  6. Redis进阶-细说分布式锁

    文章目录 Pre 引 分布式锁演进 V1 分布式锁演进 V2 分布式锁演进 V3 分布式锁演进 V4 分布式锁演进 V5 终极版-分布式锁演进(Redisson ) V6 Code Redisson分 ...

  7. 基于 Redis 实现的分布式锁

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:我的大学到研究生自学 Java 之路,过程艰辛,不放弃,保持热情,最终发现我是这样拿到大厂 offer 的! 作 ...

  8. redis系列:分布式锁

    1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分为两部分,一个是单机环境, ...

  9. 小王,在 Java 中如何利用 redis 实现一个分布式锁服务呢???

    作者:杨高超 juejin.im/post/5a4984af6fb9a0450b66bc57 在现代的编程语言中,接触过多线程编程的程序员多多少少对锁有一定的了解.简单的说,多线程中的锁就是在多线程环 ...

最新文章

  1. java 时间加减_Java中时间加减的比较
  2. jstat和jmap使用
  3. c#发送简单的post、get请求
  4. 搭建james邮件服务器
  5. 部署Vista – 第2部分:理解Windows安装程序和Windows映像文件格式
  6. bnx2: Can't load firmware file bnx2/bnx2-mips-09-6.2.1b.fw
  7. SOME/IP不等同于SOA,CommonAPI-RPC通信和vsomeip基于消息通信
  8. 软件开发中 前台、中台、后台英文_中台为什么这么火?
  9. [Python]用Python下载网络小说.23333
  10. vuereact视频截图
  11. 思考的力量-总结-脑图
  12. Chrome 浏览器 模糊的解决方法
  13. 汉语言专家级C1,汉语言文学专业审核(文科生均可参考)
  14. 《Swift4打造今日头条视频实战项目实战》最新
  15. 【读书笔记】十年涨薪30倍:财务职场透视.html.pdf
  16. 古希腊数学家毕达哥拉斯数学题
  17. ubuntu18.04系统安装WiFi适配器驱动
  18. Nginx中last和break redirect和permanent区别和联系
  19. 十款PHP开发框架横向比较
  20. kubernet 在centos 搭建的集群上的实践 -- 《一》

热门文章

  1. linux和windows和鸿蒙,linux很好,但为何大家都用Win,鸿蒙系统站错阵营了吗?
  2. 数据持化技术的发展演变(SQL、JDBC、mybatis)
  3. Pytorch离线安装 matlibplot
  4. Nexus搭建Maven私有仓库
  5. 编写第一个Spring程序——IOC实现
  6. JDK源码解析之 java.lang.Error
  7. PACKING【二维01背包】
  8. VANSI打造全球领先的区块链数字资产交易平台
  9. spring boot 1.5.4 定时任务和异步调用(十)
  10. [转载]使用awk进行数字计算,保留指定位小数