听听Redis的变化?

问题描述 投票:11回答:5

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

谢谢?

node.js redis
5个回答
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. 对于您收到的每个命令,请调用回调

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

编辑:同步v / s监视器

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

12
投票

两种选择:

  1. 使用MONITOR命令 - 它会跟踪到达Redis的每个命令,您可以分析并查看何时触摸您的集合。
  2. 如果您“拥有”写入集合的代码,请发出其他代码(您的回调)的信号。你可以使用Redis Pub/Sub频道。

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


3
投票

简短回答 - 没有。

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


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

如果你使用的是java。 redis-replicator实现了redis复制协议。更多细节请参考references


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]
© www.soinside.com 2019 - 2024. All rights reserved.