gpt4 book ai didi

data-structures - Redis中的最优存储结构

转载 作者:可可西里 更新时间:2023-11-01 11:22:35 25 4
gpt4 key购买 nike

我正在寻找存储以下信息组。我存储了一个分钟时间戳(例如,将在 1 分钟窗口中看到的所有浏览器 ID 分组),然后是浏览器引用列表。我希望只有一个浏览器 ID 实例

这个数据结构可以使用Redis中的什么数据结构?有没有更好的存储方式?

...
12:06 -> browser1, browser7
12:07 -> browser8
12:08 -> browser4, browser5, browser6, browser9
...

每一行可以有大约 1 天的生存时间。

添加新的 browserID 时,我首先检查浏览器 ID 是否已存在于数据中的某处,如果存在则删除并添加到新的分钟行。

最后,我每隔 1 分钟获取 30 分钟前的行并处理这些浏览器 ID,然后在完全处理后从列表中删除该行。

此数据结构中任何时候都可能有多达 100 万个浏览器引用。

最佳答案

好的,新信息,新答案:)

让我们让每个浏览器成为数据库中的一个键,指向它当前所在的时间戳。还有一个键代表每个时间戳,以及它“包含”的一组浏览器。

添加新浏览器时;

  1. 通过检查它的 key 是否存在来检查它是否已经在系统中。
  2. 如果是,检查它属于哪个时间戳,将其从旧时间戳中删除,添加到新时间戳中。更新浏览器 key 。
  3. 如果不是,则将其添加到时间戳中并设置浏览器 key 。

要使 key 过期,我可能不会使用内置过期,而是使用 cron 作业或其他东西来

  1. 删除时间戳中的所有浏览器 key
  2. 删除时间戳键。

示例数据结构;

ts:12:01 -> {1, 3}
ts:12:02 -> {2}

browser:1 -> 12:01
browser:2 -> 12:02
browser:3 -> 12:01

这应该是合理的 O(1),但常数时间稍长(每个操作有多个请求)。可以通过使用服务器端 ruby​​ 脚本来减少。

希望对您有所帮助!

关于data-structures - Redis中的最优存储结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291065/

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