一、常见分布式锁
基于数据库实现
基于redis实现(性能最高)
基于zookeeper实现(可靠性最高)
二、基于redis实现实现分布式锁
1、命令
1、设置锁 命令:setnx key_name value setnx users 10 接着执行 setnx user 20 返回0 操作失败 因为上锁了 2、释放锁 命令:del key_name del users 3、过期设置 命令:expire key_name value expire users 20 即上锁又设置过期时间使操作称为原子操作 set users 10 nx ex 12
2、java代码
三、uuid防止误删锁操作
问题分析
解决
设置不同的uuid,释放锁定的时候判断当前的uuid和要释放的锁uuid是否一样
上面代码修改
设置uuid
比较释放
四、lua保证删除操作原子性