gpt4 book ai didi

database - 在Redis中存储用户 View

转载 作者:行者123 更新时间:2023-12-03 06:42:35 25 4
gpt4 key购买 nike

我有一个网站,其中包含帖子。当用户查看某条帖子的时间超过3秒钟时,该次数即视为 View 。将发出以下请求并将其以以下格式存储在Redis中:

user_id: [1,4,5]

其中 user_id是键,而array是一个存储用户查看过的帖子列表的集合。我相信这是一种非常简单的方法,但是从长远来看,我相信每个用户的设置都会非常非常长。目前,我的网站规模不大。我正在1GB RAM和1核上为其供电。我知道短期内我不会超出任何硬件限制,但是我想知道这是否是一个好的设计,或者是否有更好的存储用户 View 的方法。我选择Redis的原因是,与在Redis中存储相比,发出将数据存储在SQL数据库中的请求要慢。

最佳答案

在您的情况下和您的规模中,分析处理,redis在足够大的规模和方案之前就足够了。我仍然建议从postgresqlyandex clickhouse开始,以提供广泛的查询功能和更好的分析数据结构。

由于您可能有 future 计划(每周,每月,所有时间或基于用户)发布热门帖子,因此您可能需要有关用户和帖子之间所有互动的历史记录。 8个月后,如果您决定根据用户群,时间间隔或其他因素来发布热门帖子,则需要该历史记录。在redis sets中,您将不会拥有它。如果您想拥有它,那么您将需要其他sets / sorted sets来跟踪用户后关系。每当您将新帖子添加到用户的集合时,都需要将该帖子添加到帖子的用户的排序集合中。我认为在这种情况下,在不同时间看到相同的帖子也是另一个考虑因素。

127.0.0.1:6379> sadd user:1 post1 post2 post3 post4
(integer) 4
127.0.0.1:6379> sadd user:1:posts post1 post2 post3 post4
(integer) 4
127.0.0.1:6379> zadd post1:users 1589791701 user:1
(integer) 1
127.0.0.1:6379> zadd post2:users 1589791701 user:1
(integer) 1
127.0.0.1:6379> zadd post3:users 1589791701 user:1
(integer) 1
127.0.0.1:6379> zadd post4:users 1589791701 user:1
(integer) 1
127.0.0.1:6379> zrange post1:users 0 -1 withscores
1) "user:1"
2) "1589791701"
127.0.0.1:6379>

如果用户群增长,则需要使用 spopsmemberssrandmember查询以获取这些帖子-但我不确定它是否会满足您的期望-因为您无法分页(无需使用spop并移入另一组)。如果您需要根据多个用户进行查询-那么您需要跟踪所有用户以查询他们的集合(您可能已经拥有了)-交集等。

如果您决定使用redis;那么您可以考虑使用 lists以获得更好的分页,并通过 incrby / hincrby保留帖子查看次数。

关键点是历史记录,并且历史记录在所有集群中的分布式键中的查询能力。在您的情况下,您需要做一些额外的工作来保持该历史记录处于 Activity 状态。

关于database - 在Redis中存储用户 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61858980/

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