美文网首页
redis集群lua脚本遇到的问题

redis集群lua脚本遇到的问题

作者: hisenyuan | 来源:发表于2018-03-01 20:03 被阅读0次

    执行这个脚本很奇怪

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

    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
    

    相关文章

      网友评论

          本文标题:redis集群lua脚本遇到的问题

          本文链接:https://www.haomeiwen.com/subject/ziunxftx.html