分布式锁需要解决的问题
互斥性,安全性,死锁,容错
考虑使用SETNX
SETNX key value : 如果key不存在,则创建并赋值
时间复杂度:O(1)
返回值:设置成功,返回1;设置失败,返回0。
解决SETNX长期有效问题
EXPIRE key seconds
设置key的生存时间,当key过期时(生存时间为0),会自动删除
缺点:原子性得不到满足
解决中间程序崩溃问题:
SET key value [EX secounds] [PX milliseconds] [NX|XX]
EX second:设置键得过期时间为second秒
PX millisecond :设置键得过期时间为millisecond 毫秒
NX :只在键不存在时,才对键进行设置操作
XX :只在键已经存在时,才对键进行设置操作
SET操作成功完成时,返回OK,否则返回nil
大量的key同时过期的注意事项
集中过期,由于清除大量使用的key很耗时,会出现短暂的卡顿现象
解决方案
在设置key的过期时间的时候,给每个key加上随机值