美文网首页分布式redis
redis实现分布式锁

redis实现分布式锁

作者: 修行者12138 | 来源:发表于2020-10-07 12:15 被阅读0次

set命令: 当key存在的时候,set就会覆盖key的value值
setnx命令: 如果key已存在,返回0,如果key不存在,设置成功,返回1,只有第一个请求可以设置key成功,也就是拿到锁,执行完业务逻辑后,再del key

如果程序有问题,没有正常del key,那么这个锁会一直释放不了

优化的方法就是加过期时间,确保锁在一定时间后能够释放.

这样处理后,就可以保证锁可以正常的释放。但是会有一个新的问题,就是取锁和设置过期时间这两个操作之间,服务器可能会挂掉,因为取锁,也就是setnx和设置过期时间是两个操作,不具备原子性所以不可能同时完成,那么如何解决呢?

从 Redis 2.6.12 版本开始,setnx和expire可以通过一个set命令一起执行,让两个操作变成一个,可以解决这个问题。

SET key value [EX seconds] [PX millisecounds] [NX|XX]
EX seconds:设置键的过期时间为second秒
PX millisecounds:设置键的过期时间为millisecounds 毫秒
NX:只在键不存在的时候,才对键进行设置操作
XX:只在键已经存在的时候,才对键进行设置操作
SET操作成功后,返回的是OK,失败返回NIL

相关文章

网友评论

    本文标题:redis实现分布式锁

    本文链接:https://www.haomeiwen.com/subject/wsgfpktx.html