gpt4 book ai didi

redis - 在 Redis 中组织非规范化数据

转载 作者:可可西里 更新时间:2023-11-01 11:12:59 27 4
gpt4 key购买 nike

在 Redis 数据库中,我有许多哈希对应于“故事”对象。

我有一个有序集 stories,其中包含上述(故事)的所有键,可以方便地检索故事。

我现在想将任意表情符号(即对应于“笑脸”等的 Unicode 字符)与故事一起存储为“用户情绪”,对应于故事让用户感受到的情绪。

我在想:

  • 创建名为 emotions 的新哈希值,其中包含单个表情符号(每个表情符号一个)
  • 创建一个名为 story-emotions 的哈希,可以高效检索和计算与故事相关的所有情绪
  • 创建另一个名为 user-story-emotions 的新散列,将用户 ID 映射到 story-emotion 散列中的项目。

典型的查询是:

  • 检索当前用户的故事的所有情绪
  • 检索最近 50 篇故事中每种情绪的计数

这听起来像是一个明智的方法吗?

最佳答案

非常明智,但我想我可以帮助它变得更明智。

要存储表情符号字典,请使用两个哈希。首先,让我们称之为 emoticon-id 应该有一个字段来表示每个表情符号。字段名称是实际的 Unicode 序列,值是从 0 开始的唯一整数值​​,并随着每个新表情符号的添加而递增。

另一个哈希,id-emoticon,应该放在适当的位置来进行反向映射,即从作为 id 的字段名称到实际的 Unicode 值。

这为您提供了 O(1) 的表情符号查找,您还应该考虑将其缓存在您的应用中。

要存储 user-story-emotions 数据,请查看 Redis 的位图。简而言之,使用表情符号 id 作为索引来切换该用户对该故事的存在/不存在。

请注意,为了保持紧凑,您会希望流行的情绪具有低 ID,以便您的位图尽可能小。

要存储聚合的story-emotions,Sorted Set 是更好的选择。元素可以是 id 或实际的 unicode,分数应该是当前计数。这将允许您获取 HitTest 门的表情符号 (ZREVRANGEBYSCORE) 和/或页面,类似于您处理最近 50 个故事的方式(我假设您使用的是 故事 排序集)。

最后,在为第二个查询提供服务时,在获取 50 个 story-emotion 计数器值的大部分时使用流水线或 Lua 脚本,以获得更高的吞吐量和更好的并发性。

关于redis - 在 Redis 中组织非规范化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45377453/

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