Not*_*fer 22
更新:阅读本文的人 - 这些都是古老的答案,请忽略它们。你需要的是 Redis Keyspace Notifications,它已经存在了很长时间。见https://redis.io/topics/notifications
Ofe*_*lig 13
两种选择:
使用MONITOR命令 - 它跟踪到达Redis的每个命令,您可以分析并查看何时触摸您的集合.
如果您"拥有"写入集合的代码,请发出其他代码(您的回调)的信号.您可以使用Redis Pub/Sub通道.
编辑 Redis实际上将在2.8版中实现此功能.请参阅Antirez的博客文章:Redis密钥空间更改通知系统.
您也可以使用sync命令连接到Redis服务器,如Slave.请参阅Redis Replication如何工作?快速介绍.
sync命令的输出有两个阶段.在第一阶段,服务器返回数据库dump.rdb文件.一旦发送文件,它就开始以Redis协议发送命令,该协议也是AOF格式.
以下是您可以做的高级图片:
SYNC命令这似乎很多工作,但你应该能够很容易地破解它.它也会成为一个很好的开源库!
编辑:同步v/s监视器
Monitor是一个调试命令.响应格式可以(并且有)随时间变化(d).Sync用于主 - >从属复制,因此将得到更好的支持Monitor将发出所有命令,包括只读命令.Sync只会获得修改数据的命令.Monitor将记录在lua脚本中执行的各个命令.Sync只会传输整个lua脚本,所以你必须自己解析脚本.这确实是一个交易破坏者sync.Monitor将记录未成功的Sync命令,仅记录修改数据的命令.例如,该命令del non-existing-key将由监视器记录,但在运行同步时不会显示.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)