Files
cfw-autumn/server/src/_luaScriptsV2/deleteFullCustomerCache/batchDeleteFullCustomerCache.lua
2026-01-12 08:52:36 +00:00

47 lines
1.3 KiB
Lua

--[[
Batch delete multiple FullCustomer caches from Redis.
For each customer, atomically:
1. Checks if test guard exists (skip that customer if so)
2. Sets the stale-write guard key
3. Deletes the cache key
KEYS: none (all keys passed via ARGV to support variable number of customers)
ARGV:
[1] guardTimestamp - timestamp for all guards
[2] guardTtl - TTL in seconds for guard keys
[3] customersJson - JSON array of {testGuardKey, guardKey, cacheKey} objects
Returns:
JSON object: { deleted: number, skipped: number }
]]
local guardTimestamp = ARGV[1]
local guardTtl = tonumber(ARGV[2])
local customersJson = ARGV[3]
local customers = cjson.decode(customersJson)
local deleted = 0
local skipped = 0
for _, customer in ipairs(customers) do
local testGuardKey = customer.testGuardKey
local guardKey = customer.guardKey
local cacheKey = customer.cacheKey
-- Check test guard first
if redis.call("EXISTS", testGuardKey) == 1 then
skipped = skipped + 1
else
-- Set stale-write guard and delete cache
redis.call("SET", guardKey, guardTimestamp, "EX", guardTtl)
local wasDeleted = redis.call("DEL", cacheKey)
if wasDeleted > 0 then
deleted = deleted + 1
end
end
end
return cjson.encode({ deleted = deleted, skipped = skipped })