redisess
Version:
Powerful redis session manager for NodeJS
76 lines (73 loc) • 2.54 kB
JavaScript
export function getKillScript() {
return `
local prefix = ARGV[1]
local sessionId = ARGV[2]
local userId = ARGV[3]
redis.call("zrem", prefix..":ACTIVITY", sessionId)
redis.call("zrem", prefix..":EXPIRES", sessionId)
redis.call("zrem", prefix..":user_"..userId, sessionId)
redis.call("del", prefix..":sess_"..sessionId)
if (redis.call("zcount", prefix..":user_"..userId, "+inf", "-inf")>0) then
redis.call("zrem", prefix..":USERS", userId)
end
return 1
`;
}
export function getKillAllScript() {
return `
-- find keys with wildcard
local matches = redis.call("keys", ARGV[1])
--if there are any keys
if unpack(matches) ~= nil then
--delete all
return redis.call("del", unpack(matches))
else
return 0 --if no keys to delete
end
`;
}
export function getWriteScript(additionalFields) {
let s = '';
if (additionalFields) {
for (let i = 0; i < additionalFields.length; i++) {
s += ', "f' + i + '", ARGV[' + (7 + i) + ']';
}
}
return `
local prefix = ARGV[1]
local lastAccess = tonumber(ARGV[2])
local userId = ARGV[3]
local sessionId = ARGV[4]
local expires = tonumber(ARGV[5])
local ttl = tonumber(ARGV[6])
redis.call("zadd", prefix..":USERS", lastAccess, userId)
redis.call("zadd", prefix..":ACTIVITY", lastAccess, sessionId)
redis.call("zadd", prefix..":user_"..userId, lastAccess, sessionId)
redis.call("hmset", prefix..":sess_"..sessionId, "us", userId, "la", lastAccess, "ex", expires, "ttl", ttl${s})
if (expires > 0) then
redis.call("zadd", prefix..":EXPIRES", expires, sessionId)
else
redis.call("zrem", prefix..":EXPIRES", sessionId)
end
return 1
`;
}
export function getWipeScript() {
return `
-- find keys with wildcard
local matches = redis.call("zrevrangebyscore", ARGV[1]..":EXPIRES", ARGV[2], "-inf")
if unpack(matches) == nil then
return 0
end
-- Iterate keys
for _,key in ipairs(matches) do
local userId = redis.call("HGET", ARGV[1]..":sess_"..key, "us")
if userId ~= nil then
redis.call('zrem', ARGV[1]..":user_"..userId, key)
end
redis.call("del", ARGV[1]..":sess_"..key)
end
redis.call("zrem", ARGV[1]..":ACTIVITY", unpack(matches))
redis.call("zrem", ARGV[1]..":EXPIRES", unpack(matches))
`;
}