弟弟捣蛋把所有应用密码锁怎么设置密码码,包括设置,而密码我又不知道,怎么办

两个嘟要争着出去弟弟争不赢还是放弃了

INCR命令会将key的值加一如果key值不存茬,则key值会被初始化为0然后执行INCR操作。

 
利用INCR命令结合程序构建锁,具体使用逻辑如下:

2)客户端A执行INCR LOCK_1234操作如果为1,则无其他客户端使用先设置过期时间避免程序异常影响其他程序使用此key。如果值不为1则有其他客户端在占用此key,等一会再次访问直到值为0。
3)客户端A处理完逻辑后删除LOCK_1234
 
 
 
 
利用SETNX实现锁操作和上边的INCR类似,具体实现如下:
 
 
 
Redis从2.6.12版本开始 SET命令的行为可以通过一系列参数来修改。具体参数如丅:


3)NX:只在键不存在时才对键进行设置操作。
4)XX:只在键已经存在时才对键进行设置操作。
可以通过NX参数和EX参数实现锁操作代码洳下:
 

4.以上方式存在的问题

 
以上方式都设置了过期时间,原因在于如果程序由于某些bug以外退出了不加过期时间的话,这个key会一直被锁定无法更新。
但是加过期时间来处理就会有问题如果客户端1在设置的过期时间内程序正常执行,但是没有处理完这时过期时间失效了,然后这个key的锁被客户端2获取在客户端2还没处理完的时候客户端1处理完了,然后删除了客户端2的锁
针对这个问题可以在给锁赋值的时候增加随机字符,然后删除的时候判断下是否为自己赋的值就可以了具体实现如下:
 

我要回帖

更多关于 设置密码 的文章

 

随机推荐