键值对 VS 大量数据的哈希



让我们假设在一个我们有大约 1000 万用户的系统中。 我们需要在从数据库中检索到 Redis 后缓存这些用户对象。

现在的问题是,我们会将这些 JSON 对象存储到一个键值对中,例如"user_1",或者更合适的解决方案是将它们全部放入同一个哈希"用户"中,哈希键将是用户 ID "在这种情况下为 1"

我认为拥有键值对会比哈希占用更多的内存,但是性能如何呢?

由于全局键空间和哈希都是哈希表,因此访问时间的复杂性O(1)。在这两种情况下,性能都不应该成为问题。

顺便说一句,我会看看这篇官方 Redis 文档关于内存优化的文章。其第一段指出:

自 Redis 2.2 起,许多数据类型都经过优化,以使用更少的空间,最高可达 一定大小。哈希、列表、仅由整数组成的集合,以及 排序集,当小于给定数量的元素时,最多 最大元素大小,以非常节省内存的方式编码 使用的内存最多减少 10 倍(使用的内存减少 5 倍) 平均储蓄)。

另外,你说:

我们有大约1000万用户。

然后,如果您使用 globak 键空间或哈希,您应该看看使用 Redis 集群进行分片。也许这样,您甚至应该能够优化更多方案。

晚了

3 年,但鉴于 @Matias 对使用 Redis 集群进行分片的评论,值得注意的是分片单元是键名。 这意味着哈希中的所有值最终将在同一台服务器上。 因此,对于数百万用户来说,全局密钥空间将允许分片,但不允许哈希。

最新更新