Redis锁
Posted 海绵爱上星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis锁相关的知识,希望对你有一定的参考价值。
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是单线程的。
以上是关于Redis锁的主要内容,如果未能解决你的问题,请参考以下文章