引用文献:http://doc.redisfans.com/string/set.html
(本文仅是用来记录学习使用,不作他用。)
SET key value [EX seconds] [PX milliseconds] [NX|XX]
可以通过以下修改,让这个锁实现更健壮:
不使用固定的字符串作为键的值,而是设置一个不可猜测(non-guessable)的长随机字符串,作为口令串(token)。
不使用 DEL 命令来释放锁,而是发送一个 Lua 脚本,这个脚本只在客户端传入的值和键的口令串相匹配时,才对键进行删除。
以下是一个简单的解锁脚本示例:
ifredis.call("get",KEYS[1])==ARGV[1]thenreturnredis.call("del",KEYS[1])elsereturn0end
这个脚本可以通过 EVAL ...script... 1 resource-name token-value 命令来调用。
网友评论