redis集群lua脚本遇到的问题

2018-03-01  本文已影响0人  hisenyuan

执行这个脚本很奇怪

遇到一个奇特的问题,记录一下,后期看看

  1. 改变参数会导致错误的结果
  2. 修改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
上一篇下一篇

猜你喜欢

热点阅读