我希望能够在我的redis集合中进行任何更改时运行回调。回调将把键和值作为输入。这样的事情可能吗?
谢谢?
您也可以使用sync命令连接到Redis服务器,如Slave。请参阅Redis Replication Works?如何快速介绍。
sync命令的输出有两个阶段。在第一阶段,服务器返回数据库dump.rdb文件。一旦发送文件,它就开始以Redis协议发送命令,该协议也是AOF格式。
以下是您可以做的高级图片:
SYNC
命令这似乎很多工作,但你应该能够很容易地破解它。它也会成为一个很好的开源库!
编辑:同步v / s监视器
Monitor
是一个调试命令。响应格式可以(并且有)随时间变化(d)。 Sync
用于Master - > Slave复制,因此将得到更好的支持Monitor
将发出所有命令,包括只读命令。 Sync
只会获得修改数据的命令。Monitor
将记录在lua脚本中执行的各个命令。 Sync
只会传输整个lua脚本,所以你必须自己解析脚本。这确实是sync
的交易破坏者。Monitor
将记录未成功的命令,Sync
将仅记录修改数据的命令。例如,命令del non-existing-key
将由监视器记录,但在运行同步时不会显示。两种选择:
MONITOR
命令 - 它会跟踪到达Redis的每个命令,您可以分析并查看何时触摸您的集合。编辑Redis实际上将在2.8版中实现此功能。请参阅Antirez的博文:Redis keyspace changes notification system。
简短回答 - 没有。
更长的答案 - 只有在客户端的redis PubSub中将发布添加到特定频道时才能执行此操作。或者用户MONITOR来解析redis中正在发生的事情,但是如果那个进程失去与redis的连接 - 你就搞砸了。
<dependency>
<groupId>com.moilioncircle</groupId>
<artifactId>redis-replicator</artifactId>
<version>2.5.0</version>
</dependency>
如果你使用的是java。 redis-replicator
实现了redis复制协议。更多细节请参考references
在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]