请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

对set NX实现分布式锁有个疑问

set locktarget 12345 ex 10 nx

老师您好,如上语句,如果A客户端在10秒内还未执行完对共享数据的操作,此时B客户端也能获取锁,然后对共享数据做操作了,这不是会有问题的吗?

正在回答 回答被采纳积分+3

3回答

qq_郭靖_03148326 2019-05-27 01:45:47

看到用这种方式来当分布式锁就很怀疑老师的经验和水平了.如果真是干货,老师大可以说一下自己平时在项目中是怎么做的.然而并没有.好像只是把网上的面试题用视频收费的方式来演绎出来了而已.

1 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    对于你的评价我不打算去证明什么,我只想说我在专心做课程,本章涉及的是Redis,主要考察Redis相关的知识,其中一个就是主流常用的分布式锁,针对这个分布式锁,可以使用Setnx简单实现,我项目里面也有使用类似的功能去满足内部福利抢购等简单需求,但是我觉得如果为了单单这个问题,或者所有问题,都从我的项目(涉密)从0开始说起,然后再介绍到结合我项目的需求分析为什么要用到这个技术,像这里为什么不用zookeeper,mysql集群或者其他缓存去实现分布式锁就会舍本逐末,搞不清重点,而且整个课程变成跨年也不为过。我只能说清者自清,我讲解的内容主要针对高效备战面试,并且也穿插了各种各样的实践,但是主要还是为理论服务,而且网络的知识参差不齐,我只是像尽我的一份力量去帮助大家梳理。萝卜青菜,各有所爱,也请就事论事,不要以课程论人的好坏,课程不好可以提,如果实在接受不了,建议参照慕课网的政策进行退款处理,祝好。
    回复 有任何疑惑可以回复我~ 2019-05-27 23:15:59
翔仔 2019-01-27 01:47:59

同学好,这个属于业务层的逻辑,咱们底层这些机制也是需要配合上层使用才能发挥作用的,此时需要调大相关的时间,其实也可以动态调整,即根据上层应用的一些信号量来确定是否能够去做共享数据的更新操作。

1 回复 有任何疑惑可以回复我~
  • 提问者 cqxing #1
    感觉这个网址说得更透彻一些
    https://github.com/Snailclimb/JavaGuide/blob/master/%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/Redis/Redlock%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81.md
    回复 有任何疑惑可以回复我~ 2019-01-28 11:50:33
  • 我也不明白其中的道理,跟业务层有什么关系呢。怎么动态去设置这个时间吗?业务层执行可能需要5分钟,可能10分钟,那我总不能设置把时间设置成24小时再过期啊
    回复 有任何疑惑可以回复我~ 2019-03-20 21:19:04
  • 比如你可以写个程序去统计客户端A执行需要锁定的操作的平均耗时,之后就可以写个算法,依据你的请求情况动态调整锁的占用时间,同时,在获取锁之后,也就是成功对这个key赋值之后,可以按照约定给你自己设置一个超时时间,这个时间一过就主动回滚,并提前将锁释放,这样是不是不需要这么极端,把时间设置成24小时再过期?同时,我们设置这个过期时间只是为了防止占用锁的程序挂了的情况,此时也可以根据你业务的需求设置一个观察者,一旦观察到占用锁的进程挂了而该key还存在,就将其置为空。总之,有很多方法
    回复 有任何疑惑可以回复我~ 2019-03-21 01:13:04
慕沐7580699 2019-01-26 23:49:11

这个要根据业务场景来决定

0 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    感谢同学的热心回答
    回复 有任何疑惑可以回复我~ 2019-01-27 01:48:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信