聆听Redis的变化?

我希望能够在我的redis集合中进行任何更改时运行callback。 callback将把关键和价值作为input。 是这样的可能吗?

谢谢?

您也可以使用sync命令像Slave一样连接到Redis服务器。 请参阅Redis复制如何工作? 快速介绍。

同步命令的输出有两个阶段。 在第一阶段,服务器返回数据库dump.rdb文件。 一旦文件被发送,它就开始以Redis协议发送命令,这也是AOF格式。

下面是你可以做的高层次的图片:

  1. 连接到Redis服务器并发出SYNC命令
  2. 保存并parsingdump.rdb文件。 build立初始数据集。 基于node.js的rdbparsing器是可用的
  3. parsing后面的命令。 由于它们处于Redis协议中,因此可以从现有的Redis库开始。
  4. 对于您收到的每个命令,调用callback

这似乎很多工作,但你应该能够很容易地破解这个。 这也将成为一个很好的开源库!

编辑:同步v / s显示器

  1. Monitor是一个debugging命令。 响应格式可以(并且)随时间变化(d)。 Sync用于主 – >从属复制,因此会得到更好的支持
  2. Monitor将会发出所有的命令,包括只读命令。 Sync只会让你修改数据的命令。
  3. Monitor将logging在lua脚本中执行的单个命令。 Sync将只传输整个lua脚本,所以你将不得不自己parsing脚本。 这确实是一个sync断路器。
  4. Monitor将logging不成功的命令, Sync将只logging修改数据的命令。 例如,命令del non-existing-key将被监视器logging,但在运行同步时不会显示。

两个选项:

  1. 使用MONITOR命令 – 它会跟踪每个到达Redis的命令,并且可以分析和查看您的集合何时被触摸。

  2. 如果您“拥有”写入集合的代码,则发信号给您的其他代码(您的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-mocktesting)

你可以有几个订阅者(听众)到同一个频道,在你的情况下,这将是你的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]