redis锁
基本方式
加锁
set resource_name random_value NX PX 30000(毫秒)
解锁??需要判断是否是自己加的锁
del resource_name
lua脚本
redis2.6+版本通过EVAl和EVALSHA可以原子性执行脚本
EVAL script numkeys key[key...] arg[arg...]
script -脚本 numberkeys -键的个数 key[key...] -key列名 arg[arg...] -参数列表
EVAL "return{KEYS[1],KEYS[2],AGR[1],ARG[2]}" 2 key1 key2 first second
redis.call() / redis.pcall()
eval "return redis.call('set',KEYS[1],ARGV[1])" 1 scriptKey scriptValue
eval "return redis.call('get',KEYS[1])" 1 scriptKey scriptValue
EVALSHA
事先把lua脚本加载到redis服务端,得到sha脚本的sha1值 script load script_txt -> sha1 然后根据给定的sha1校验码,执行缓存在服务器的脚本 evalsha sha1 numberkeys key[key...] arg[arg...]