我希望能够在我的 redis 集合中进行任何更改时运行回调。回调将键和值作为输入。这样的事情可能吗?
谢谢?
更新:无论谁在读这篇文章——这些都是古老的答案,请忽略它们。您需要的是已经存在多年的 Redis Keyspace Notifications。见https://redis.io/topics/notifications
两种选择:
使用MONITOR
命令 - 它跟踪到达 Redis 的每个命令,您可以分析并查看何时触及您的集合。
如果您“拥有”写入集合的代码,请向您的其他代码(您的回调)发出信号。您可以为此使用Redis Pub/Sub频道。
编辑Redis 实际上将在 2.8 版本中实现此功能。请参阅 Antirez 的博客文章:Redis 键空间更改通知系统。
您还可以使用同步命令像追随者一样连接到 Redis 服务器。查看Redis 复制的工作原理?快速介绍。
同步命令的输出有两个阶段。在第一阶段,服务器返回数据库 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
将由监视器记录,但在您运行同步时不会显示。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]
<dependency>
<groupId>com.moilioncircle</groupId>
<artifactId>redis-replicator</artifactId>
<version>2.5.0</version>
</dependency>
如果您使用的是 java. redis-replicator
实现redis复制协议。更多细节请参考参考资料