听听Redis的变化?

时间:2012-05-20 20:31:49

标签: node.js redis

我希望能够在我的redis集合中进行任何更改时运行回调。回调将把键和值作为输入。这样的事情可能吗?

感谢?

5 个答案:

答案 0 :(得分:12)

两个选项:

  1. 使用MONITOR命令 - 它会跟踪到达Redis的每个命令,您可以分析并查看何时触摸您的收藏。

  2. 如果您“拥有”写入集合的代码,请发出其他代码(您的回调)的信号。您可以使用Redis Pub/Sub频道。

  3. 编辑 Redis实际上将在2.8版中实现此功能。请参阅Antirez的博文:Redis keyspace changes notification system

答案 1 :(得分:8)

您还可以使用sync命令连接到Redis服务器,如Slave。有关快速介绍的信息,请参见Redis Replication Works?

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

以下是您可以做的高级图片:

  1. 连接到Redis服务器并发出SYNC命令
  2. 保存并解析dump.rdb文件。构建初始数据集。 node.js based rdb parser可用
  3. 解析后面的命令。由于它们是Redis协议,因此您可以从现有的Redis库开始。
  4. 对于您收到的每个命令,请调用回调
  5. 看起来很多工作,但你应该能够很容易地破解它。它也会成为一个很好的开源库!

    编辑:同步v / s监视器

    1. Monitor是一个调试命令。响应格式可以(并且有)随时间变化(d)。 Sync用于主 - >奴隶复制等将得到更好的支持
    2. Monitor将发出所有命令,包括只读命令。 Sync只会获得修改数据的命令。
    3. Monitor将记录在lua脚本中执行的各个命令。 Sync只会传输整个lua脚本,因此您必须自己解析脚本。这确实是sync
    4. 的交易破坏者
    5. Monitor将记录未成功的命令,Sync将仅记录修改数据的命令。例如,监视器将记录命令del non-existing-key,但在运行同步时不会显示该命令。

答案 2 :(得分:3)

简短回答 - 不。

稍长的答案 - 只有在客户端的redis PubSub中将发布添加到特定频道时才能执行此操作。或者用户MONITOR来解析redis中发生的一切,但如果该进程失去与redis的连接 - 你就搞砸了。

答案 3 :(得分:0)

<dependency>
    <groupId>com.moilioncircle</groupId>
    <artifactId>redis-replicator</artifactId>
    <version>2.5.0</version>
</dependency>

如果您使用的是java。 redis-replicator实现了redis复制协议。 更多详情请参阅references

答案 4 :(得分:0)

2017年

现在有一个发布/订阅机制,可以与node-redis模块一起使用。请参阅具体文档HERE。 (也适用于redis-mock进行测试)

您可以让多个订阅者(听众)加入同一个频道,在您的情况下,这将是您收藏的关键。

快速示例:(有关实施细节,请参阅上述文档)

sub.subscribe('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]