聆听Redis的变化?
我希望能够在我的redis集合中进行任何更改时运行callback。 callback将把关键和价值作为input。 是这样的可能吗?
谢谢?
您也可以使用sync命令像Slave一样连接到Redis服务器。 请参阅Redis复制如何工作? 快速介绍。
同步命令的输出有两个阶段。 在第一阶段,服务器返回数据库dump.rdb文件。 一旦文件被发送,它就开始以Redis协议发送命令,这也是AOF格式。
下面是你可以做的高层次的图片:
- 连接到Redis服务器并发出
SYNC
命令 - 保存并parsingdump.rdb文件。 build立初始数据集。 基于node.js的rdbparsing器是可用的
- parsing后面的命令。 由于它们处于Redis协议中,因此可以从现有的Redis库开始。
- 对于您收到的每个命令,调用callback
这似乎很多工作,但你应该能够很容易地破解这个。 这也将成为一个很好的开源库!
编辑:同步v / s显示器
-
Monitor
是一个debugging命令。 响应格式可以(并且)随时间变化(d)。Sync
用于主 – >从属复制,因此会得到更好的支持 -
Monitor
将会发出所有的命令,包括只读命令。Sync
只会让你修改数据的命令。 -
Monitor
将logging在lua脚本中执行的单个命令。Sync
将只传输整个lua脚本,所以你将不得不自己parsing脚本。 这确实是一个sync
断路器。 -
Monitor
将logging不成功的命令,Sync
将只logging修改数据的命令。 例如,命令del non-existing-key
将被监视器logging,但在运行同步时不会显示。
两个选项:
-
使用
MONITOR
命令 – 它会跟踪每个到达Redis的命令,并且可以分析和查看您的集合何时被触摸。 -
如果您“拥有”写入集合的代码,则发信号给您的其他代码(您的callback)。 你可以使用Redis的Pub / Sub通道。
编辑 Redis实际上是要在2.8版本中实现这个function。 查看Antirez的博客文章: Redis keyspace改变通知系统 。
简短的回答 – 不。
稍微长一点的答案 – 只有在客户端的redis PubSub中将发布添加到特定频道时,才能做到这一点。 或者用户MONITOR来parsingredis中正在进行的任何操作,但是如果这个过程失去了与redis的连接,那么就搞砸了。
<dependency> <groupId>com.moilioncircle</groupId> <artifactId>redis-replicator</artifactId> <version>2.3.1</version> </dependency>
如果你使用的是java。 redis-replicator
实现了redis复制协议。 更多细节请参考参考
在2017年
现在有一个发布/订阅机制,您可以使用node-redis
模块。 请参阅这里的具体文件。 (也适用于redis-mock
testing)
你可以有几个订阅者(听众)到同一个频道,在你的情况下,这将是你的collections的关键。
快速示例:(请参阅上述文档的实现细节)
sub.subscibe('myCollection'); sub.on('message', (channel, data) => { // this is the callback you talked about console.log(`${channel} is now ${data}`); }); // ... later on ... pub.publish('myCollection', [1,2,3]) // console will output: // myCollection is now [1,2,3]