Skip to content

Instantly share code, notes, and snippets.

@mberlanda
Created October 8, 2019 15:09
Show Gist options
  • Save mberlanda/0ff1d95cd071a78ff5f98b2f44d4fa18 to your computer and use it in GitHub Desktop.
Save mberlanda/0ff1d95cd071a78ff5f98b2f44d4fa18 to your computer and use it in GitHub Desktop.
Sample session invalidation management with redis and lua
-------- BEGIN argv ---------
local foo = ARGV[1] -- foo
local bar = ARGV[2] -- foo:bar
local baz = ARGV[3] -- foo:baz
local val = ARGV[4]
local ttl = ARGV[5]
-------- END argv ---------
local key = "sessions::" .. foo .. "::" .. bar .. "::" .. baz
redis.log(redis.LOG_DEBUG, "Started processing " .. key)
redis.call("SETEX", key, ttl, val)
redis.call("SADD", "sessions::foo::" .. foo, key)
redis.call("EXPIRE", "sessions::foo::" .. foo, ttl)
redis.call("SADD", "sessions::bar::" .. bar, key)
redis.call("EXPIRE", "sessions::bar::" .. bar, ttl)
redis.call("SADD", "sessions::baz::" .. baz, key)
redis.call("EXPIRE", "sessions::baz::" .. baz, ttl)
redis.log(redis.LOG_DEBUG, "Finished processing " .. key)
return 1
-------- BEGIN argv ---------
local kind = ARGV[1] -- foo, bar, baz
local val = ARGV[2]
-------- END argv ---------
local sessions = "sessions::" .. kind .. "::" .. val
redis.log(redis.LOG_DEBUG, "Started deleting sessions for " .. sessions)
local matches = redis.call("SMEMBERS", sessions)
local count = table.getn(matches)
if count > 0 then
redis.call("UNLINK", unpack(matches))
end
redis.log(redis.LOG_DEBUG, "Finished deleting sessions for " .. sessions)
return count
#!/usr/bin/env bash
create_session_sha=$(cat create_session.lua | redis-cli -x script load)
delete_session_sha=$(cat delete_sessions_by.lua | redis-cli -x script load)
echo "evalsha ${create_session_sha} 0 foo baa baw {} 60" | redis-cli -x
echo "evalsha ${create_session_sha} 0 foo bab baw {} 60" | redis-cli -x
echo "evalsha ${create_session_sha} 0 foo bac baw {} 60" | redis-cli -x
echo "evalsha ${create_session_sha} 0 foo bad baw {} 60" | redis-cli -x
echo "evalsha ${create_session_sha} 0 fop bae baz {} 60" | redis-cli -x
echo "evalsha ${create_session_sha} 0 fop baf baz {} 60" | redis-cli -x
echo "evalsha ${create_session_sha} 0 fop bag baz {} 60" | redis-cli -x
echo "evalsha ${create_session_sha} 0 fop bah baz {} 60" | redis-cli -x
echo "evalsha ${delete_session_sha} 0 foo fop" | redis-cli -x
echo "evalsha ${delete_session_sha} 0 baz baw" | redis-cli -x
echo "evalsha ${delete_session_sha} 0 foo foo" | redis-cli -x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment