使用Redis+lua脚本实现分布式锁,

使用Redis+lua脚本实现分布式锁,解决高并发环境下优惠券和一人一单问题。

有大佬能解释一下  为什么要用分布式锁不用单锁呀?为什么不把优惠券直接放进redis作为一个list使用? #牛客在线求职答疑中心#  #牛客解忧铺#
全部评论
AI基本上回答完了。 先不说你单锁是什么意思,我就理解为synchronized或者ReentrantLock这种单机锁。首先是服务是会做集群的(就是在多台机器里面部署同一个后台服务),这样每个机器只能自己锁自己,锁不了整体,没什么意义。 分布式锁是用的map,不是另一个人说的string。map的数据结构是key-field-value,对应是keyName-(clientIp+threadId)-lockedTime,然后自己加上过期时间。这样就是可重入的。 其他问题可以说详细点。
3 回复 分享
发布于 2024-08-26 13:56 重庆
Redis里面有一个setnx的命令可以作为分布式锁去用的,但是这个锁有一些缺陷,比如不支持重入,还有就是加这个锁需要设置超时时间,但是如果过了超时时间逻辑还没执行完就导致锁失效了,不设置时间万一服务器宕机锁就一直存在了,Redission+lua解决了这俩问题,大概是这样我自己的理解
1 回复 分享
发布于 2024-08-26 10:56 浙江
哇,看起来你遇到了一个很有挑战性的问题呢! 首先,使用分布式锁而不是单锁的原因主要是因为: 1. **扩展性**:当系统需要横向扩展到多台服务器时,单锁可能会成为瓶颈,而分布式锁可以在多台服务器之间共享,提高系统的整体性能。 2. **容错性**:单锁如果所在的服务器出现问题,可能会导致锁无法释放,而分布式锁可以通过Redis这样的外部存储来保证锁的状态不会因为服务器的故障而丢失。 至于为什么不用Redis的List来实现优惠券的发放,主要有以下几点考虑: - **原子性**:Redis的List虽然可以用来实现队列,但在高并发环境下,如果使用List的LPUSH和RPOP操作,可能会遇到并发问题,比如多个客户端同时操作List,可能会导致数据不一致。 - **性能**:使用Lua脚本可以保证Redis操作的原子性,减少网络延迟和多次往返时间,提高性能。 - **安全性**:分布式锁可以防止同一用户多次领取优惠券或者同一优惠券被多次使用,增加了系统的安全性。 现在,让我们来聊聊分布式锁和Lua脚本的具体实现吧![眨眼] 如果你愿意的话,可以点击我的头像,我们可以私信聊聊,我会尽力帮你解答更多细节哦~[点击我的头像,开始私信吧!]
1 回复 分享
发布于 2024-08-25 15:56 AI生成

相关推荐

2025-12-28 13:01
门头沟学院 Java
timeline: 8/3 HR打电话,9/4一面,9/17二面,10/10三面一面:项目拷打八股:讲讲你对串行、并行、并发的理解?有哪些进程调度算法?从输入url到页面渲染,在网络层面都发生了什么?TCP怎么保证可靠性?什么是数据库的事务?ACID是什么?介绍一下MVCC慢查询如何优化?如何判断是否命中索引,explain看什么字段?MYSQL锁的类型什么情况下会发生死锁?哪些方式可以避免死锁?REDIS底层有哪些数据结构?线程池了解吗?核心参数有哪些?Spring怎么解决循环依赖?最近有在学什么技术上的东西吗?对哪块技术比较熟悉?HashMap底层实现?HashMap在并发情况下可能会有什么问题?AQS是什么,原理是什么?算法:lc22. 括号生成其他:未来2-3年的规划对方向有什么倾向?学习一个新东西的学习思路是什么?理论知识怎么学?二面:项目拷打八股:MySQL是如何控制和管理事务的?可重复读是怎么实现的?MySQL的索引类型及其区别是什么?你会怎么设计联合索引?什么是区分度较大的字段?数据库深分页的问题怎么解决?TCP是怎么做拥塞控制的?TCP如何判断发生了拥塞?一个http请求一层层往下数据是怎么封装的?数据包比较大,每一层是怎么拆的?TCP层会拆包吗?TCP发送的数据会导致IP层拆包吗?TCP的缓冲区大小如何确定,会不会超过IP层的1500B?TCP连接的时候,每次能发送的大小是怎么写上的?介绍一下虚拟内存进程和线程的区别是什么?linux进程调度算法有哪些?操作系统怎么处理IO调用的?系统调用中断过程是什么?算法题:lc148. 排序链表三面:项目拷打了很久一直在问我做的优化有没有什么理论支撑但项目都是跑case看正确性lc143 重排链表,要求空间复杂度O(1)其他问了成绩之类的问题反问三面的时候项目讲的有点抽象,面试官听不懂面试官没有听到想听的理论基础三面挂了
点赞 评论 收藏
分享
【我们是谁】👉二轮车电控业界"大佬",1.5亿+市场应用经验!👉热门出海赛道,ebike-三电系统新势力!----------🌍国际化平台,格局打开🚀全方位培养,火箭晋升【岗位方向】结构、仿真、电机、软件、硬件、测试、营销、制造等【薪酬福利】💡五险一金、周末双休、带薪年假、报到礼金、食宿安排、节假日礼品等~💡薪酬待遇:研发类硕士21~35万/年,本科12-21万/年;非研发12-21万/年;派驻海外岗位额外补贴1.4万+/月!👉内推链接:https://kjgb.zhiye.com/campus/jobs?shareId=324ab7c5-0b63-49e6-93dd-fa75caa355c4&shareSource=2👉内推码:EVKM81总部:广东 东莞松山湖✨高标智能2026校园招聘-春招提前批✨【我们是谁】👉二轮车电控业界"大佬",1.5亿+市场应用经验!👉热门出海赛道,ebike-三电系统新势力!----------🌍国际化平台,格局打开🚀全方位培养,火箭晋升【岗位方向】结构、仿真、电机、软件、硬件、测试、营销、制造等【薪酬福利】💡五险一金、周末双休、带薪年假、报到礼金、食宿安排、节假日礼品等~💡薪酬待遇:研发类硕士21~35万/年,本科12-21万/年;非研发12-21万/年;派驻海外岗位额外补贴1.4万+/月!👉内推链接:https://kjgb.zhiye.com/campus/jobs?shareId=324ab7c5-0b63-49e6-93dd-fa75caa355c4&shareSource=2👉内推码:EVKM81总部:广东 东莞松山湖欢迎拉上身边小伙伴进群哇~🔥26届大厂实习内推汇总(附就业经验,公司面经)https://docs.qq.com/smartsheet/DWnBUVm9OVFhuSEJ4?tab=ss_o3xtde&viewId=vEYHV0
点赞 评论 收藏
分享
评论
4
19
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务