锁不是我们日常运用的锁,三斤重的锁往门上一挂,谁都进不来的那种。
程序中的锁是在执行一个可能存在冲突的操作的时候,先看看有没有人已经操作了。比如说文件锁,在更改一个数据时,先加一个文件,user_1_do.txt,当另一个人要对同样的数据进行操作,先看锁在不在,在就先歇歇,等会儿操作,不在就加锁。当做完后,把锁去掉。
但是IO操作还是有点慢啊,所以可以使用内存,直接使用redis,方便好用。
setnx name True。这个操作啥意思?如果name不存在就创建。set name if not exit。
del name。就是删除
但是问题来了,设置完锁,进行完操作,进程死了,这个锁就加上了,谁也拿不下来,完蛋了。。。。
所以设置过期时间 expire 5。不删除5秒后自动失效。
但是在 setnx name True 和 expire 之间,进程死了怎么办?还是删不掉。redis添加了原子操作,就像Mysql的事物一样,要么同时成功,要么同时失败。
setnx name True ex 5 nx
妥了。
------看书笔记,过些时候回头看,自己给自己找茬。
网友评论