sql >> Databáze >  >> NoSQL >> Redis

Může být příkaz redis incr omezen na konkrétní číslo?

Můžete použít malý skript Lua k provedení přírůstku v samotném Redis, takže je v podstatě jednovláknový:

127.0.0.1:6379> set CappedInt 7
OK
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 8
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 9
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 10
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 10

Místo psaní skriptu můžete také vložit kód Lua do souboru s názvem IncWithCap.lua takhle:

local cap=10
if(redis.call(ARGV[1],KEYS[1])+0 < cap) then
   return redis.call('INCR',KEYS[1])
end
return cap

Poté jej můžete načíst do Redis pomocí:

redis-cli SCRIPT LOAD "$(cat IncWithCap.lua)"

Ukázkový výstup

"6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1"

Poté jej můžete zavolat/provést pomocí:

127.0.0.1:6379> evalsha 6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1 1 CappedInt get



  1. Jaká uživatelská oprávnění MongoDB potřebuji k přidání uživatele do nové/jiné mongo databáze?

  2. Přehled správy uživatelů MongoDB

  3. Jak získat zpět smazaný prostor bez `db.repairDatabase()`?

  4. Pokud je Redis single Threaded, jak může být tak rychlý?