执行这个脚本很奇怪
遇到一个奇特的问题,记录一下,后期看看
- 改变参数会导致错误的结果
- 修改key对应的值也会导致错误的结果
192.168.1.174:7000> eval "if redis.call('get', KEYS[1]) >= ARGV[1] then return redis.call('decrby', KEYS[1],ARGV[2]) else return -1 end" 1 hisen 20 1
(integer) -1
192.168.1.174:7000> eval "if redis.call('get', KEYS[1]) >= ARGV[1] then return redis.call('decrby', KEYS[1],ARGV[2]) else return -1 end" 1 hisen 0 1
(integer) 11102
192.168.1.174:7000> eval "if redis.call('get', KEYS[1]) >= ARGV[1] then return redis.call('decrby', KEYS[1],ARGV[2]) else return -1 end" 1 hisen 20 1
(integer) -1
192.168.1.174:7000> eval "if redis.call('get', KEYS[1]) >= ARGV[1] then return redis.call('decrby', KEYS[1],ARGV[2]) else return -1 end" 1 hisen 0 1
(integer) 11101
192.168.1.174:7000> eval "if redis.call('get', KEYS[1]) >= ARGV[1] then return redis.call('decrby', KEYS[1],ARGV[2]) else return -1 end" 1 hisen 1 1
(integer) 11100
192.168.1.174:7000> eval "if redis.call('get', KEYS[1]) >= ARGV[1] then return redis.call('decrby', KEYS[1],ARGV[2]) else return -1 end" 1 hisen 11 1
(integer) 11099
192.168.1.174:7000> eval "if redis.call('get', KEYS[1]) >= ARGV[1] then return redis.call('decrby', KEYS[1],ARGV[2]) else return -1 end" 1 hisen 13 1
解决办法
转换成数字进行比较
if tonumber(redis.call('get', KEYS[1])) >= tonumber(ARGV[1]) then return redis.call('decrby', KEYS[1],ARGV[2]) else return -1 end
网友评论