setnx

setnx key value

将key的值设置为value,当且仅当value不存在的情况。

如果key存在,不做任何操作。
set if not exist

删除锁

问题?

业务执行过程中出现异常。没有删除锁,造成死锁。

解决

异常处理,finally处理,删除锁。

还有问题?系统挂了怎么办哪?

业务执行过程中,系统挂了,死锁了 。

解决:设置超时时间

还有问题?

还没有设置超时时间就挂了,死锁了。
两行代码设置一行,保证原子性。

还有问题?

多线程高并发访问时候。

前线程可能释放后面线程的锁。

超时时间10s

A线程完成执行为15秒,当A执行到十秒时,锁被redis删除,后面B进程进来执行到一半,B线程的锁被A线程释放了。自己的锁被别人释放了

解决:

还有问题?

程序执行时间过长,造成超时。超过过期时间。

解决:锁续命。业务代码开始,分线程定时(时长小于锁过期时间30/10)监测锁是否还存在,锁还存在,重新设置超时时长。

redisson

redis的java客户端,实现分布式锁。


默认超时时间30s。

问题主从架构

设置完锁后主节点挂了,从节点变成主节点,无锁。

怎么提升性能?

文章目录