启动redis
- 启动redis进程:/usr/local/bin/redis-server /etc/redis.conf
- 进入redis:usr/local/bin/redis-cli
- 关闭redis进程:shutdown或者kill -9 进程号
redis分布式锁(共享锁)
总结:先上锁setnx,再加过期时间expire,将value设置成UUID,防止误删,加入LUA脚本保证操作原子性
命令setnx 上锁 ,del 释放锁 --举例上厕所排队,进去的人上锁,出来之后释放锁,其他人等待
命令 expire 设置过期时间 —举例如果上厕所睡着了,那么强行解开锁
方式上完锁还没有设置过期时间系统挂掉,可以一条语句 上锁+设置过期时间
优化–防止误删
情景:a先操作,操作中途卡顿了,锁到时间自动释放,b抢到锁,进行操作时,a不卡顿了,执行完操作,仍然会有释放锁的动作,因为a的锁已经被释放了,会错误的把b的释放掉
解决方案:使用UUID,释放的时候对比一下,防止误删
优化—LUA脚本保证操作原子性
情景:a操作完准备释放锁,先比对UUID是一致的,准备释放,还没有释放的时候,锁到了过期时间,自动释放了,此时就有可能把b的锁释放掉(因为比对UUID的时候是一致的,问题出来了没有原子性,所以加入LUA脚本)