首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Redis多键或多哈希字段

Redis多键或多哈希字段
EN

Stack Overflow用户
提问于 2022-04-19 09:56:27
回答 1查看 138关注 0票数 1

我有大约300 k行数据,如这个Session:Hist:account

会议:Hist:100000

会议:Hist:100001

会议:Hist:100002

.

每个都有5-10个孩子的会话时间

b31c2a43-e61b-493a-b8d4-ff0729fe89de:1846971068807

5552daa2-c9f6-4635-8a7c-6f027b4aa1a3:1846971065461

.

我有两个选择:

  1. 使用哈希,键是Session:Hist:account,字段是会话,值是time
  2. 使用Hash平面全帐户,键是Session:Hist,字段是accountsession,值是时间

我的红宝石有一个主人,4-5奴隶,用于存储和推送会话(约300 K *5在2h)每天,并清除在一天结束!

因此,问题是哪些选项对性能更好(更快的同步主从/更小的内存/更快的巨大请求),谢谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-19 15:16:59

比较提到的两个选项,选项2不是最优的。

根据官方Redis文档

值得注意的是,小散列(即具有小值的几个元素)在内存中以特殊方式编码,从而使它们具有非常高的内存效率。

更多细节这里

因此,使用一个带有键Session:Hist的巨大散列会影响内存消耗。它还会影响集群(切分),因为您将在一个实例上设置一个散列(热点),这样就会受到锤击。

选项1不受上述问题的影响。只要您有许多分布良好的散列(即所有帐户都有相似的会话计数,而少数帐户以大量会话占优势),散列就像Session:Hist:[account]那样关键。

但是,如果有可能将会话不均匀地分配到帐户中,则可以尝试(并衡量)备选方案1a的效率:

  • 密钥:Session:Hist:[account]:[session - last two characters]
  • 字段:[session's last two characters]
  • 价值:[time]

示例:

  • 密钥:Session:Hist:100000:b31c2a43-e61b-493a-b8d4-ff0729fe89
  • 字段:de
  • 价值:1846971068807

这样,每个散列只包含256个字段(假设会话的最后2个字符是十六进制,所有可能的组合都是256)。如果redis.conf定义了hash-max-zipmap-entries 256,这将是最优的。

显然,选项1a需要在应用程序中进行一些修改,但是使用适当的工作台标记(即节省内存),您可以决定是否值得这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71923026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档