packages feed

haskoin-store-1.9.0: src/Haskoin/Store/Cache/lua/evict.lua

-- Evict the least recently used xpubs past a number: evictScript in
-- Haskoin.Store.Cache. Each xpub goes as delete.lua removes one.
local p = ARGV[1]
local max = tonumber(ARGV[2])
local n = 0
while redis.call('ZCARD', p .. 'lru') > max do
  local id = redis.call('ZRANGE', p .. 'lru', 0, 0)[1]
  local xk = p .. 'x:' .. id .. ':'
  for _, a in ipairs(redis.call('SMEMBERS', xk .. 'addrs')) do
    redis.call('SREM', p .. 'a:' .. a, id)
  end
  for _, t in ipairs(redis.call('ZRANGE', xk .. 'txs', 0, -1)) do
    local rk = p .. 'txref:' .. t
    redis.call('SREM', rk, id)
    if redis.call('SCARD', rk) == 0 then
      redis.call('DEL', rk, p .. 'tx:' .. t, p .. 'sp:' .. t)
    end
  end
  redis.call('DEL', xk .. 'meta', xk .. 'bal', xk .. 'txs', xk .. 'utxo', xk .. 'addrs', xk .. 'uop')
  redis.call('ZREM', p .. 'lru', id)
  n = n + 1
end
return n