标签:命令 会同 时间戳 不同 dash 代码 key 核心 过期
1、Redis锁(分布式锁有多种,redis只是其中一种实现,核心:加锁,解锁,锁超时,可用于分布式场景和单机场景
。适用于在分布式系统中,实现不同线程对资源和代码的同步访问——分布式锁)
1、1两个命令
SETNX:SET if Not eXist——假如不存在,设置,返回1;否则返回0,说明已经存在,并且设置失败;
GETSET:GET and SET ——先get得到值,然后set新值
1.2 使用redis作为分布式锁
在(业务层)关键代码前加锁,代码后解锁。
1.3 可能产生死锁
若仅仅只调用SETIfAbsent()判断是否加锁成功,则有可能产生死锁。如,如果拿到锁的线程在释放锁之前发生了异常,则不会达到释放锁的语句,那么其他的线程始终拿不到锁的资源,
造成死锁。
所以需要采用GETSET方法,给key设置一个时间戳,为当前时间+过期时间。
问题1:getAndSet这个redis命令,两个线程是不会同时get的吗?
答:不会,Redis是单线程的。
标签:命令 会同 时间戳 不同 dash 代码 key 核心 过期
原文地址:https://www.cnblogs.com/zzytxl/p/12642806.html