在Redis中倾听变化?

falq053o  于 2023-02-11  发布在  Redis
关注(0)|答案(5)|浏览(101)

我希望在我的redis集合中发生任何改变时都能运行回调函数。回调函数会将键和值作为输入。这样的事情可能吗?
谢谢?

62lalag4

62lalag41#

更新(2020年):无论是谁阅读这篇文章--这些都是古老的答案,不要理会它们。你需要的是Redis密钥空间通知,它已经存在了很长时间。

kyks70gy

kyks70gy2#

两个选项:
1.使用MONITOR命令--它会追踪每一个进入Redis的命令,你可以分析和查看你的收藏被访问的时间。
1.如果你"拥有"写入集合的代码,那么你可以用Redis Pub/Sub通道通知你的其他代码(你的回调)。

wz8daaqr

wz8daaqr3#

你也可以像粉丝一样使用sync命令连接到Redis服务器,请参阅How Redis Replication Works?快速了解。
sync命令的输出有两个阶段,第一阶段服务器返回数据库转储.rdb文件,文件发送后,服务器开始以Redis协议发送命令,也是AOF格式。
以下是您可以执行的操作的概要图:
1.连接到Redis服务器并发出SYNC命令
1.保存并解析dump.rdb文件。构建初始数据集。node.js based rdb parser可用
1.解析下面的命令,因为它们是Redis协议,你可以从一个现有的Redis库开始。
1.对于收到的每个命令,调用回调
这看起来工作量很大,但是你应该可以很容易地破解它。而且它也会成为一个很好的开源库!

编辑:同步与监视器

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

pjngdqdw4#

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]
envsm3lx

envsm3lx5#

<dependency>
    <groupId>com.moilioncircle</groupId>
    <artifactId>redis-replicator</artifactId>
    <version>2.5.0</version>
</dependency>

如果您使用java. redis-replicator实现了redis复制协议。更多细节请参考references

相关问题