Scripts LUA que adicionam essas novas funções ao Redis.
Eles são muito úteis para mim em coisas como análises ou “gamificação”. Use SCRIPT LOAD no console para adicionar essas funções
SETIFHIGHER
Defina ou atualize a chave se o novo valor for maior que o atual. Se não existir retorna OK, se atualizado retorna o incremento, se não atualizado retorna 0
SCRIPT LOAD "local c = tonumber(redis.call('get', KEYS[1])); if c then if tonumber(ARGV[1]) > c then redis.call('set', KEYS[1], ARGV[1]) return tonumber(ARGV[1]) - c else return 0 end else return redis.call('set', KEYS[1], ARGV[1]) end"
# Use:
EVALSHA "2ab979bc4b89ab15c14805586c33d898f99a53d4" 1 key 245
 SETIFLOWER
Defina ou atualize a chave se o novo valor for inferior ao atual. Se não existir retorna OK, se atualizado retorna o decréscimo, se não atualizado retorna 0
SCRIPT LOAD "local c = tonumber(redis.call('get', KEYS[1])); if c then if tonumber(ARGV[1]) < c then redis.call('set', KEYS[1], ARGV[1]) return tonumber(ARGV[1]) - c else return 0 end else return redis.call('set', KEYS[1], ARGV[1]) end"
# Use:
EVALSHA "3b99f44a33619dca62593053ce4bf52f7b432880" 1 key 3535
ZADDIFHIGHER
Defina ou atualize o conjunto classificado se o novo valor for maior que o atual. Se não existir retorna “OK”, se atualizado retorna o incremento, se não atualizado retorna 0
SCRIPT LOAD "local c = tonumber(redis.call('zscore', KEYS[1], ARGV[1])); if c then if tonumber(KEYS[2]) > c then redis.call('zadd', KEYS[1], KEYS[2], ARGV[1]) return tonumber(KEYS[2]) - c else return 0 end else redis.call('zadd', KEYS[1], KEYS[2], ARGV[1]) return 'OK' end"
# Use:
EVALSHA "8d1c75ea83b6f8f9ba5f7f048188da7ee6c4b35f" 2 set 10 member
 ZADDIFLOWER
Defina ou atualize o conjunto classificado se o novo valor for inferior ao atual. Se não existir retorna “OK”, se atualizado retorna o decremento, se não atualizado retorna 0
SCRIPT LOAD "local c = tonumber(redis.call('zscore', KEYS[1], ARGV[1])); if c then if tonumber(KEYS[2]) < c then redis.call('zadd', KEYS[1], KEYS[2], ARGV[1]) return tonumber(KEYS[2]) - c else return 0 end else redis.call('zadd', KEYS[1], KEYS[2], ARGV[1]) return 'OK' end"
# Use:
EVALSHA "1f8b6cf618d14c48e23b483fc42df71b6bea582e" 2 set 10 member
 Benchmarks básicos
# SET key val # 87489.06
# SETRANGE key2 6 "Redis" # 75757.58 req/s
# INCR key 245 # 70224.72 req/s
# INCRBY key 245 22 # 67114.09 req/s
# EVAL SET key val # 46296.29 req/s
# SETIFHIGHER # 41666.67 req/s
# SETIFLOWER # 41054.12 req/s
# ZADDIFHIGHER # 34952.81 req/s
# ZADDIFLOWER # 34831.07 req/s