听听Redis的变化?

fan*_*ncy 12 redis node.js

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

谢谢?

Not*_*fer 22

更新:阅读本文的人 - 这些都是古老的答案,请忽略它们。你需要的是 Redis Keyspace Notifications,它已经存在了很长时间。见https://redis.io/topics/notifications


Ofe*_*lig 13

两种选择:

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

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

编辑 Redis实际上将在2.8版中实现此功能.请参阅Antirez的博客文章:Redis密钥空间更改通知系统.

  • 而“MONITOR”会降低[性能一半以上](https://redis.io/commands/monitor),所以你最好不要在生产中经常运行它 (2认同)

Sri*_*nan 8

您也可以使用sync命令连接到Redis服务器,如Slave.请参阅Redis Replication如何工作?快速介绍.

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

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

  1. 连接到Redis服务器并发出SYNC命令
  2. 保存并解析dump.rdb文件.构建初始数据集.一个基于node.js的RDB解析器可用
  3. 解析后面的命令.由于它们是Redis协议,因此您可以从现有的Redis库开始.
  4. 对于您收到的每个命令,请调用回调

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

编辑:同步v/s监视器

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


Xel*_*tor 5

2017年

现在有一个可以与node-redis模块一起使用的发布/订阅机制。请参阅此处的具体文档。(也可用于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]
Run Code Online (Sandbox Code Playgroud)