我有1000到10,000个键存储在Redis中,它们的值类型是list。当一个新项目被添加到任何一个现有的列表中时,我需要通知我的golang程序。一旦收到通知,我需要生成一个新的goroutine并执行一个小操作。
我使用redigo作为redis连接池。
在不重载Redis实例的情况下,解决此问题的最佳方法是什么?
发布于 2016-01-24 07:33:54
您可以启用Redis的键空间通知,并在您感兴趣的键/模式上订阅相关事件。
更多细节可以在文档中找到:http://redis.io/topics/notifications
发布于 2016-01-24 03:56:36
我还没有尝试过这种方法,但据推测,我将使用Redis的Lua来实现两个新命令-- MSR_PUSH和MSR_POP --它们将分别执行以下操作:
-- MSR_PUSH
redis.call("PUSH", KEYS[1], ARGV[1])
redis.call("PUBLISH", "notify", KEYS[1])以及:
-- MSR_POP
local v = redis.call("POP", KEYS[1])
if v then
redis.call("PUBLISH", "notify", KEYS[1])
end
return v因此,这些Lua脚本会像通常一样更新列表,但也会将更新后的键名发布到notify /sub,这将允许一个监视脚本(golang)做一些事情。你也可以把它推到另一个队列上,然后进行长时间的投票。
此链接有更多关于Lua和Redis:https://www.redisgreen.net/blog/intro-to-lua-for-redis-programmers/的信息。
https://stackoverflow.com/questions/34971769
复制相似问题