使用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生成

相关推荐

03-31 15:12
厦门大学 Java
项目15min,项目怎么用agent优化和设计差不多20min,无手撕,聊得很开心1. 介绍一下项目2. 项目有没有用户/落地?(没有,进行过压力测试)3. 布隆过滤器概念,怎么解决缓存穿透4. 如果有黑客通过肉鸡生成大量商品id攻击详情接口怎么办,发生误判怎么办,怎么过滤(答的 预先根据合法id创建布隆过滤器,遇到误判查一次数据库,如果不存在通过redis的bfadd补位,可以防下一次的非法访问)5. apt框架相关5.1 怎么通过你这个框架把性能提高十倍?(beanutil换成编译期预处理,更快)5.2 为什么能判断出系统性能不足是框架的问题?(答的做了jmeter测试,qps瓶颈,老师建议,)5.3 怎么处理类的嵌套循环问题?(不知道)5.4 框架递归映射怎么做的?(也不知道,第一次被问这么深)5.5 是否考虑过APT能力的插件化设计,比如用装饰器增强日志采集和错误收集?(已实现编译器错误采集和属性注入检测,别的没做。。。)6. 项目前端模块是否全由AI开发?7.  有没有AI实践过前端的工程化?(react相关?这块胡言乱语)8. 普通前端页面和工程化页面的区别?9. AI在工程化中的局限性?10. 你说你参加过携程前端训练营,那你是怎么结合ai做前端项目的落地?11. ai和agent相关:11.1 如果要把一个电商项目面向AI设计并MCP化,怎么做?或者说要做哪个方向?(答的搜索方面的升级,做商品推荐)11.2 电商场景下需要更精细的用户消费习惯设计,需结合用户画像和语义理解做搜索推荐,使用mysql数据库是否合适?(答的向量数据库)11.3 PG数据库的横向扩展和pg vector能力更适合语义相似度检索,有没有深入了解这方面或者使用过?(没有)11.4 Pg在向量和图数据库方面的潜力有了解吗?(不会,面试官说PG能通过商品间的图关系实现推荐系统的底层支持)11.5 有没有考虑或者做过embedding层设计?12. Agent是否需要有读数据库的能力?(答的让skill做,但是面试官不太满意)13. agent调工具的实现方式有哪些?14. function calling了解吗?15. skill和mcp有什么区别16. 反问PE全栈这个岗是做什么?(结合ai全链路开发)面试表现怎么样?感觉问的超级多ai相关的知识,这俩天刚开始学,给我问蒙了
小牛炒肉:这个岗太哈人了,我今天面了一小时,像面产品一样,难度高的我没话说
查看24道真题和解析
点赞 评论 收藏
分享
评论
4
19
分享

创作者周榜

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