键值对用于大量数据的散列值

时间:2016-03-14 08:28:46

标签: hash redis

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

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

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

2 个答案:

答案 0 :(得分:1)

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

顺便说一句,我会看一下这位官员Redis docs' article about memory optimization。它的第一段说明:

  

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

另外,你说:

  

我们有大约1000万用户。

然后,如果你使用globak密钥空间或哈希值,你应该看看使用Redis Cluster的分片。可能这样你甚至可以优化你的场景。

答案 1 :(得分:1)

晚了3年,但是考虑到@Matias关于使用Redis Cluster进行分片的评论,值得注意的是,分片单位是关键名称。这意味着哈希中的所有值将最终在同一服务器上。因此,对于数百万用户而言,全局密钥空间将允许分片,但不允许散列。