1. 因为redis中键名只能存在一个,所以可以用键名来做锁,其值可以作为可重入锁;
2.初始加锁,setex 命令设置 setex key 1, 如果成功则加锁成功,如果没有成功则加锁失败。
3.加锁成功后设置有效期,可和2做lua脚本一块执行,然后在有效期内定时延长有效期时间,这样做的原因是万一加锁成功后程序死掉,在有效期过后还可继续。
4.可重入锁,在同一线程加锁成功后,再次加锁,将value+1,当释放锁时将value-1,当value的值为0时,删除key。锁释放完毕。
原文:https://www.cnblogs.com/jtfBlogs/p/12776132.html