local function gen_cache_learn_functor(redis_params, learn_script_id, conf)
local packed_conf = ucl.to_format(conf, 'msgpack')
return function(task, cache_id, is_spam)
- local is_per_user = task:get_mempool():has_variable('stat_user')
local function learn_redis_cb(err, data)
lua_util.debugm(N, task, 'learn_cache redis cb: %s, %s', err, data)
end
lua_redis.exec_redis_script(learn_script_id,
{ task = task, is_write = true, key = cache_id },
learn_redis_cb,
- { cache_id, is_spam and "1" or "0", packed_conf, is_per_user and "1" or "0" })
+ { cache_id, is_spam and "1" or "0", packed_conf })
end
end
cache_prefix = "learned_ids",
cache_max_elt = 10000, -- Maximum number of elements in the cache key
cache_max_keys = 5, -- Maximum number of keys in the cache
- cache_per_user_mult = 0.1, -- Multiplier for per user cache size
cache_elt_len = 32, -- Length of the element in the cache (will trim id to that value)
}
-- key1 - cache id
-- key3 - is spam (1 or 0)
-- key3 - configuration table in message pack
--- key4 - is per user (1 or 0)
local cache_id = KEYS[1]
local is_spam = KEYS[2]
local conf = cmsgpack.unpack(KEYS[3])
-local is_per_user = KEYS[4] == "1"
cache_id = string.sub(cache_id, 1, conf.cache_elt_len)
-- Try each prefix that is in Redis (as some other instance might have set it)
end
local added = false
-local lim = is_per_user and conf.cache_max_elt * conf.cache_per_user_mult or conf.cache_max_elt
+local lim = conf.cache_max_elt
for i = 0, conf.cache_max_keys do
if not added then
local prefix = conf.cache_prefix .. string.rep("X", i)