redis分布式锁

    科技2022-07-10  108

    常用的redis分布式锁实现方式

    以上方式可能会出现一些问题:

    在高并发的情况下,每个线程的执行顺序是不可预估的,当前线程抢占的锁可能被其它的锁给释放掉,应将上述代码修改成如下:

    以上方案还是会出现一些问题,比如锁失效时间不好把握,所以我们还要继续优化,一般一线大厂他们后台会启动一个异步线程去监控这个key是否存在,如果存在则会延长失效时间

    使用redisson:

    三行代码实现锁:

    原理:

    底层是通过lua脚本语言实现:

    redis是满足AP的,保证可用性,但是不保证一致性,因为在redis同步数据到从节点的时候,如果主节点宕机会导致数据丢失

    zookeeper是满足CP的,保证了一致性但是不保证可用性,因为zk在选举的时候通过ZAB协议

    redisLock实现原理:

    redisLock和zk实现原理是类似的,也是cp原理,客户端需要发送多个加锁命令到不同的redis分片中,只要有过半的redis回应客户端成功,那么就代表加锁成功,但是这样会消耗性能

    Processed: 0.019, SQL: 8