最近在看redis分布式,发现有两种问题和解决方案
1 AB并发,A先获取锁,并设置3s过期时间,但是业务处理需要4s,这样在3s的时候就被释放了?
答:为了防止没解释,锁就被释放,可以通过续时的方式,如redisson
2AB并发,A先获取锁,并设置3s过期时间,但是业务处理需要4s,所以第3s时候,B就会获得锁,A处理完删除锁,这时候删的是B锁?
答:通过指定value,每次删除锁的时候,判断是不是自己的锁,如果不是,就不要去删除
问题:感觉这两个有点矛盾,如果我按第一种方式续时,就不会出现第二种问题,那网上为什么会出现第二种问题的解决方案呢?或者说,要不要续时要看业务场景?
过期时间可以长点,后面要删除的,如果不加过期时间,没有删除掉(异常跳过了删除操作),后面就会浪费内存空间;
获取锁,key设置一个较长的有效时间(比如30秒), 业务处理完成后根据value判断并删除key。