gpt4 book ai didi

node.js - 在 Redis 中存储事件时间线

转载 作者:IT王子 更新时间:2023-10-29 06:10:25 27 4
gpt4 key购买 nike

我想在 Redis 的时间轴中存储事件列表。我正在考虑一个以 1970 年以来的秒数作为分数的排序集,允许快速查找和范围搜索。

问题是我希望这些事件中的每一个都代表一个对象,带有几个键(可能大约 3 个),所以我将存储一组排序的 ID - 然后应用程序将根据 ID 查找散列.

所以对话会是这样的:

> ZRANGEBYSCORE events start end 
1) "16"
2) "17"
> HGETALL events:16
1) "key1"
2) "val1"
...
> HGETALL events:17
...

有没有更好的方法来组织或做一些事情来避免应用程序为每个结果单独调用。是否可以在 redis-server 端完成一切以避免这种开销?这甚至是一个大问题吗?

附言。我正在使用 Node 客户端,但我的问题也适用于其他语言。

最佳答案

一个明显的解决方案是按值工作而不是按引用工作。因此,您的 zset 可以存储序列化对象,而不是存储对这些对象的引用。使用 Node ,JSON 很容易使用。

现在,如果您需要保留当前结构(因为例如您的一些对象由各种 zset 共享),那么您需要考虑 rountrips 而不是命令。 Redis 中昂贵的是往返,而不是 O(1) 命令本身的执行。

HGETALL 不支持可变参数(即您只能检索一个哈希对象)。但是 Redis 非常擅长处理流水线命令,由于 node 的异步特性,这在 node_redis 驱动程序中特别容易做到。因此,在您的示例中,您只需要两次往返:第一次执行 ZRANGEBYSCORE,第二次执行所有 HGETALL 命令(即,在发出第二个命令之前不要等待第一个 HGETALL 命令的结果)。这将非常有效。

对于当前的 Redis 版本 (2.4),无法消除第二次往返。

关于node.js - 在 Redis 中存储事件时间线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8672943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com