Use named variables instead of referring to KEYS/ARGV array indices in message cache scripts.

This commit is contained in:
Jon Chambers 2020-10-01 16:09:03 -04:00 committed by Jon Chambers
parent f3f4bd33e5
commit 551a85c1e6
7 changed files with 75 additions and 64 deletions

View File

@ -1,10 +1,11 @@
-- keys: queue_key, queue_locked_key local queueKey = KEYS[1]
-- argv: limit local queueLockKey = KEYS[2]
local limit = ARGV[1]
local locked = redis.call("GET", KEYS[2]) local locked = redis.call("GET", queueLockKey)
if locked then if locked then
return {} return {}
end end
return redis.call("ZRANGE", KEYS[1], 0, ARGV[1], "WITHSCORES") return redis.call("ZRANGE", queueKey, 0, limit, "WITHSCORES")

View File

@ -1,10 +1,11 @@
-- keys: queue_total_index local queueTotalIndexKey = KEYS[1]
-- argv: max_time, limit local maxTime = ARGV[1]
local limit = ARGV[2]
local results = redis.call("ZRANGEBYSCORE", KEYS[1], 0, ARGV[1], "LIMIT", 0, ARGV[2]) local results = redis.call("ZRANGEBYSCORE", queueTotalIndexKey, 0, maxTime, "LIMIT", 0, limit)
if results and next(results) then if results and next(results) then
redis.call("ZREM", KEYS[1], unpack(results)) redis.call("ZREM", queueTotalIndexKey, unpack(results))
end end
return results return results

View File

@ -1,24 +1,26 @@
-- keys: queue_key [1], queue_metadata_key [2], queue_total_index [3] local queueKey = KEYS[1]
-- argv: message [1], current_time [2], sender (possibly null) [3], guid [4], messageId (possibly null) [5] local queueMetadataKey = KEYS[2]
local queueTotalIndexKey = KEYS[3]
local message = ARGV[1]
local currentTime = ARGV[2]
local sender = ARGV[3]
local guid = ARGV[4]
local messageId = redis.call("HINCRBY", KEYS[2], "counter", 1) local messageId = redis.call("HINCRBY", queueMetadataKey, "counter", 1)
redis.call("ZADD", KEYS[1], "NX", messageId, ARGV[1]) redis.call("ZADD", queueKey, "NX", messageId, message)
if ARGV[3] ~= "nil" then if sender ~= "nil" then
redis.call("HSET", KEYS[2], ARGV[3], messageId) redis.call("HSET", queueMetadataKey, sender, messageId)
redis.call("HSET", queueMetadataKey, messageId, sender)
end end
redis.call("HSET", KEYS[2], ARGV[4], messageId) redis.call("HSET", queueMetadataKey, guid, messageId)
if ARGV[3] ~= "nil" then redis.call("HSET", queueMetadataKey, messageId .. "guid", guid)
redis.call("HSET", KEYS[2], messageId, ARGV[3])
end
redis.call("HSET", KEYS[2], messageId .. "guid", ARGV[4]) redis.call("EXPIRE", queueKey, 7776000) -- 90 days
redis.call("EXPIRE", queueMetadataKey, 7776000) -- 90 days
redis.call("EXPIRE", KEYS[1], 7776000) redis.call("ZADD", queueTotalIndexKey, "NX", currentTime, queueKey)
redis.call("EXPIRE", KEYS[2], 7776000) return messageId
redis.call("ZADD", KEYS[3], "NX", ARGV[2], KEYS[1])
return messageId

View File

@ -1,26 +1,27 @@
-- keys: queue_key, queue_metadata_key, queue_index local queueKey = KEYS[1]
-- argv: guid_to_remove local queueMetadataKey = KEYS[2]
local queueTotalIndexKey = KEYS[3]
local removedMessages = {} local removedMessages = {}
for _, guid in ipairs(ARGV) do for _, guid in ipairs(ARGV) do
local messageId = redis.call("HGET", KEYS[2], guid) local messageId = redis.call("HGET", queueMetadataKey, guid)
if messageId then if messageId then
local envelope = redis.call("ZRANGEBYSCORE", KEYS[1], messageId, messageId, "LIMIT", 0, 1) local envelope = redis.call("ZRANGEBYSCORE", queueKey, messageId, messageId, "LIMIT", 0, 1)
local sender = redis.call("HGET", KEYS[2], messageId) local sender = redis.call("HGET", queueMetadataKey, messageId)
redis.call("ZREMRANGEBYSCORE", KEYS[1], messageId, messageId) redis.call("ZREMRANGEBYSCORE", queueKey, messageId, messageId)
redis.call("HDEL", KEYS[2], guid) redis.call("HDEL", queueMetadataKey, guid)
redis.call("HDEL", KEYS[2], messageId .. "guid") redis.call("HDEL", queueMetadataKey, messageId .. "guid")
if sender then if sender then
redis.call("HDEL", KEYS[2], sender) redis.call("HDEL", queueMetadataKey, sender)
redis.call("HDEL", KEYS[2], messageId) redis.call("HDEL", queueMetadataKey, messageId)
end end
if (redis.call("ZCARD", KEYS[1]) == 0) then if (redis.call("ZCARD", queueKey) == 0) then
redis.call("ZREM", KEYS[3], KEYS[1]) redis.call("ZREM", queueTotalIndexKey, queueKey)
end end
if envelope and next(envelope) then if envelope and next(envelope) then

View File

@ -1,23 +1,25 @@
-- keys: queue_key, queue_metadata_key, queue_index local queueKey = KEYS[1]
-- argv: index_to_remove local queueMetadataKey = KEYS[2]
local queueTotalIndexKey = KEYS[3]
local id = ARGV[1]
local envelope = redis.call("ZRANGEBYSCORE", KEYS[1], ARGV[1], ARGV[1], "LIMIT", 0, 1) local envelope = redis.call("ZRANGEBYSCORE", queueKey, id, id, "LIMIT", 0, 1)
local removedCount = redis.call("ZREMRANGEBYSCORE", KEYS[1], ARGV[1], ARGV[1]) local removedCount = redis.call("ZREMRANGEBYSCORE", queueKey, id, id)
local senderIndex = redis.call("HGET", KEYS[2], ARGV[1]) local senderIndex = redis.call("HGET", queueMetadataKey, id)
local guidIndex = redis.call("HGET", KEYS[2], ARGV[1] .. "guid") local guidIndex = redis.call("HGET", queueMetadataKey, id .. "guid")
if senderIndex then if senderIndex then
redis.call("HDEL", KEYS[2], senderIndex) redis.call("HDEL", queueMetadataKey, senderIndex)
redis.call("HDEL", KEYS[2], ARGV[1]) redis.call("HDEL", queueMetadataKey, id)
end end
if guidIndex then if guidIndex then
redis.call("HDEL", KEYS[2], guidIndex) redis.call("HDEL", queueMetadataKey, guidIndex)
redis.call("HDEL", KEYS[2], ARGV[1] .. "guid") redis.call("HDEL", queueMetadataKey, id .. "guid")
end end
if (redis.call("ZCARD", KEYS[1]) == 0) then if (redis.call("ZCARD", queueKey) == 0) then
redis.call("ZREM", KEYS[3], KEYS[1]) redis.call("ZREM", queueTotalIndexKey, queueKey)
end end
if envelope and next(envelope) then if envelope and next(envelope) then

View File

@ -1,23 +1,25 @@
-- keys: queue_key, queue_metadata_key, queue_index local queueKey = KEYS[1]
-- argv: sender_to_remove local queueMetadataKey = KEYS[2]
local queueTotalIndexKey = KEYS[3]
local sender = ARGV[1]
local messageId = redis.call("HGET", KEYS[2], ARGV[1]) local messageId = redis.call("HGET", queueMetadataKey, sender)
if messageId then if messageId then
local envelope = redis.call("ZRANGEBYSCORE", KEYS[1], messageId, messageId, "LIMIT", 0, 1) local envelope = redis.call("ZRANGEBYSCORE", queueKey, messageId, messageId, "LIMIT", 0, 1)
local guid = redis.call("HGET", KEYS[2], messageId .. "guid") local guid = redis.call("HGET", queueMetadataKey, messageId .. "guid")
redis.call("ZREMRANGEBYSCORE", KEYS[1], messageId, messageId) redis.call("ZREMRANGEBYSCORE", queueKey, messageId, messageId)
redis.call("HDEL", KEYS[2], ARGV[1]) redis.call("HDEL", queueMetadataKey, sender)
redis.call("HDEL", KEYS[2], messageId) redis.call("HDEL", queueMetadataKey, messageId)
if guid then if guid then
redis.call("HDEL", KEYS[2], guid) redis.call("HDEL", queueMetadataKey, guid)
redis.call("HDEL", KEYS[2], messageId .. "guid") redis.call("HDEL", queueMetadataKey, messageId .. "guid")
end end
if (redis.call("ZCARD", KEYS[1]) == 0) then if (redis.call("ZCARD", queueKey) == 0) then
redis.call("ZREM", KEYS[3], KEYS[1]) redis.call("ZREM", queueTotalIndexKey, queueKey)
end end
if envelope and next(envelope) then if envelope and next(envelope) then

View File

@ -1,5 +1,7 @@
-- keys: queue_key, queue_metadata_key, queue_index local queueKey = KEYS[1]
local queueMetadataKey = KEYS[2]
local queueTotalIndexKey = KEYS[3]
redis.call("DEL", KEYS[1]) redis.call("DEL", queueKey)
redis.call("DEL", KEYS[2]) redis.call("DEL", queueMetadataKey)
redis.call("ZREM", KEYS[3], KEYS[1]) redis.call("ZREM", queueTotalIndexKey, queueKey)