我希望能够在我的redis集合中进行任何更改时运行回调。回调将把键和值作为输入。这样的事情可能吗?
感谢?
答案 0 :(得分:12)
两个选项:
使用MONITOR
命令 - 它会跟踪到达Redis的每个命令,您可以分析并查看何时触摸您的收藏。
如果您“拥有”写入集合的代码,请发出其他代码(您的回调)的信号。您可以使用Redis Pub/Sub频道。
编辑 Redis实际上将在2.8版中实现此功能。请参阅Antirez的博文:Redis keyspace changes notification system。
答案 1 :(得分:8)
您还可以使用sync命令连接到Redis服务器,如Slave。有关快速介绍的信息,请参见Redis Replication Works?。
sync命令的输出有两个阶段。在第一阶段,服务器返回数据库dump.rdb文件。一旦发送文件,它就开始以Redis协议发送命令,该协议也是AOF格式。
以下是您可以做的高级图片:
SYNC
命令看起来很多工作,但你应该能够很容易地破解它。它也会成为一个很好的开源库!
编辑:同步v / s监视器
Monitor
是一个调试命令。响应格式可以(并且有)随时间变化(d)。 Sync
用于主 - >奴隶复制等将得到更好的支持Monitor
将发出所有命令,包括只读命令。 Sync
只会获得修改数据的命令。Monitor
将记录在lua脚本中执行的各个命令。 Sync
只会传输整个lua脚本,因此您必须自己解析脚本。这确实是sync
。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]