在redis中setnx方法:当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。
synchronized是JDK形式的锁,在分布式环境下不能达到加锁的目的。此时,就需要考虑分布式锁,分布式锁主要应用于在分布式环境下,对高并发任务的处理,通过分布式锁实现并发任务串行化,从而解决加锁的目的。
其中,在构建分布式锁时,需要注意一下问题:
1.使用try...catch释放锁防止业务代码抛异常
2.使用超时时间防止系统宕机,从而保证原子性。
3.当出现一个线程加的锁被别的线程删除的问题时:设置客户端UUID,以此判断删除的锁是否是该线程的锁
4.锁续命:设置分线程,分线程设置定时任务,看是否主线程在执行业务,若还在执行业务重新将时间设置为超时时间(redission)