🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。
✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!
🔥个人主页:Ethan Yankang
🔥专栏:史上最强八股文||Java项目
🔥温馨提示:划到文末发现专栏彩蛋 点击这里直接传送
🔥本篇概览:详细讲解了Redis分布式锁如何实现 ?
思维导图
面试官:Redis分布式锁如何实现 ?
候选人:
嗯,在redis中提供了一个命令setnx(SET if not exists)
由于redis的单线程的,用了命令之后,只能有一个客户端对某一个key设置值,在没有过期或删除key的时候是其他客户端是不能设置这个key
- redis2
并发锁篇- Redis分布式锁如何实现?
- 利用命令setnx
- 命令行为
- SETNX是“SET if Not EXISTS”的缩写。
由于redis的单线程的,用了命令之后,只能有一个线程对某一个key设置值,
在没有过期或删除key的时候是其他线程是不能设置这个key的
- SETNX是“SET if Not EXISTS”的缩写。
- 返回值
- key不存在,设置key成功,返回1
- key已经存在的话,不进行任何操作,返回0
- 如何与分布式锁挂钩的呢?
- 线程唯一性
- 锁的核心逻辑是只能有一个线程持有,具有线程拥有的唯一性,
而redis的setnx命令具有设置key的线程唯一性
两者在线程操作的唯一性上是一致的,利用这套逻辑实现的。
- 锁的核心逻辑是只能有一个线程持有,具有线程拥有的唯一性,
- 释放操作的一致性
- 锁的话,只能持有线程释放了,才能被其他线程获取
- 设置key的话,只有将key删除【释放了】,才能被其他线程设置
- 线程唯一性
- 命令行为
- 利用命令setnx
- Redis锁的注意事项?
- 防止死锁
- 设置过期时间或者手动删除锁
- 如果获取锁的客户端在持有锁期间崩溃而没有释放锁,就会导致死锁。
为了避免这种情况,通常需要结合设置过期时间(如使用 EXPIRE 或 PEXPIRE 命令)来确保锁在一定时间后自动释放。
- 如果获取锁的客户端在持有锁期间崩溃而没有释放锁,就会导致死锁。
- 设置过期时间或者手动删除锁
- 确保设置锁的操作原子性
- 使用lua脚本来实现
- lua脚本在Redis中是原子性的
- 使用lua脚本来实现
- 锁的自动续期
- 问题引出
- 如果临界区代码执行时间较长,可能会出现锁过期的情况。可以考虑为锁添加自动续期的功能。
- 解决问题
- 每隔一段时间(比如锁过期时间的一半)
检查一次锁的过期时间并续期
- 每隔一段时间(比如锁过期时间的一半)
- 问题引出
- 防止死锁
- Redis分布式锁如何实现?
💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖
热门专栏推荐
🌈🌈计算机科学入门系列 关注走一波💕💕
🌈🌈CSAPP深入理解计算机原理 关注走一波💕💕
🌈🌈微服务项目之黑马头条 关注走一波💕💕
🌈🌈redis深度项目之黑马点评 关注走一波💕💕
🌈🌈Java面试八股文系列专栏 关注走一波💕💕
🌈🌈算法leetcode+剑指offer 关注走一波💕💕
总栏
🌈🌈JAVA后端技术栈 关注走一波💕💕
🌈🌈JAVA面试八股文 关注走一波💕💕
🌈🌈JAVA项目(含源码深度剖析) 关注走一波💕💕
🌈🌈计算机四件套 关注走一波💕💕
🌈🌈算法 关注走一波💕💕
🌈🌈必知必会工具集 关注走一波💕💕
🌈🌈书籍网课笔记汇总 关注走一波💕💕
🌈🌈考试复习资料 关注走一波💕💕
🌈🌈C/C++技术栈 关注走一波💕💕
🌈🌈GO技术栈 关注走一波💕💕
分栏
🌈🌈JAVA后端技术栈
🌈🌈spring 关注走一波💕💕
🌈🌈redis 关注走一波💕💕
🌈🌈MySQL 关注走一波💕💕
🌈🌈mybatis 关注走一波💕💕
🌈🌈mybatisplus 关注走一波💕💕
🌈🌈MQ 关注走一波💕💕
🌈🌈微服务 关注走一波💕💕
🌈🌈设计模式 关注走一波💕💕
🌈🌈分布式锁 关注走一波💕💕
🌈🌈JAVA八股文
JAVA面试八股文(redis、MySQL、框架、微服务、MQ、JVM、设计模式、并发编程、JAVA集合、常见技术场景)
🌈🌈JAVA项目(含源码深度剖析)
🌈🌈黑马头条(微服务) 关注走一波💕💕
🌈🌈黑马点评(redis) 关注走一波💕💕
🌈🌈计算机四件套
🌈🌈计算机基础 关注走一波💕💕
🌈🌈计算机基础 关注走一波💕💕
🌈🌈计算机网络 关注走一波💕💕
🌈🌈数据结构与算法 关注走一波💕💕
🌈🌈算法
🌈🌈leetcode 关注走一波💕💕
🌈🌈剑指offer 关注走一波💕💕
🌈🌈必知必会工具集 关注走一波💕💕
🌈🌈书籍网课笔记汇总
🌈🌈CSAPP笔记 关注走一波💕💕
🌈🌈计算机科学速成课 关注走一波💕💕
🌈🌈CS自学指南 关注走一波💕💕
🌈🌈读书笔记与每日记录 关注走一波💕💕
🌈🌈考试复习资料 关注走一波💕💕
🌈🌈C/C++技术栈 关注走一波💕💕
🌈🌈GO技术栈 关注走一波💕💕
📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!