我希望设置以下工作流程:
下面的请求集充当锁
SET locks lock_value NX PX 5000
如果返回0,则请求停止。如果它返回1则确实
INCR lock_value
INCR global_count
所以我有1套,global_count,我可以有很多套lock_value,因为它是一个变量。然后我用这个LUA脚本释放我的锁:
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
我将不断处理这些行动。
但是,每5分钟我想循环遍历所有现有的不同lock_values,其中有大量的lock_values并将每个lock_values插入到数据库中。这不会像普通的redis操作那么快。如何将此循环部分与锁定/插入数据/下拉锁定部分分开。它应该在一个单独的过程中吗?
我想我想要两个进程或两个redis服务器。一个设置锁定,增加数据,一次又一次地锁定锁定。另一个是定期扫描lock_values并将其转储到数据库中,而不会被LUA脚本阻止。对于每个lock_value,如果某些值与第一个循环不是完全一致的,那么并不重要,只要5分钟后的下一个循环获取任何丢失的增量。
这可能吗?