如何让redis工作人员以非阻塞方式访问这些集合?

时间:2015-07-21 12:35:42

标签: php mysql multithreading lua redis

我希望设置以下工作流程:

下面的请求集充当锁

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分钟后的下一个循环获取任何丢失的增量。

这可能吗?

0 个答案:

没有答案