Redis
docker で一瞬で使う memo
code:up.sh
$ docker run -it redis bash
$ redis-server &
$ redis-cli
まとめて消す
FLUSHALL
Lua Scripting
atomic に一連のクエリを発行したいときに
Redis Lua scriptingをatomicな処理とcache stampede対策に使った話 - LINE ENGINEERING
SET しようとした値が大きかったり小さかったりした時だけ SET する(例は大きい値でのみ SET できる)
code:SET_IF_GRATER
local epoch = redis.call('GET', KEYS1) or 0
if (tonumber(epoch) < tonumber(ARGV1)) then
return redis.call('SET', KEYS1, ARGV1, 'EX', ARGV2)
end
return nil
ZADD – Redis の GT は Redis 6.2 からだけどこう書ける
code:ZADD_GT
local score = redis.call('ZSCORE', KEYS1, ARGV2) or 0
if (tonumber(score) < tonumber(ARGV1)) then
return redis.call('ZADD', KEYS1, ARGV1, ARGV2)
end
return nil
SortedSet から特定のスコアの範囲のものを取って削除する
local q = redis.call('ZRANGEBYSCORE', KEYS[1], ARGV[1], ARGV[2], 'LIMIT', 0, ARGV[3]); if (q) then; for _, v in ipairs(q) do; redis.call('ZREM', KEYS[1], v); end; end; return q
同じスコアのものが LIMIT 外にある可能性があるので ZREMRANGEBYSCORE はダメでちまちま消している
#Redis