让我们假设我们拥有大约1000万用户的系统。我们需要在从数据库中检索后将这些用户对象缓存到redis中。
现在问题是我们将这些JSON对象存储到键值对中,例如" user_1"或者更合适的解决方案是将它们全部放入相同的哈希"用户"并且哈希键将是用户ID" 1在这种情况下"
我认为拥有键值对会占用比哈希更多的内存,但性能呢?
答案 0 :(得分:1)
由于全局键空间和哈希都是哈希表,因此访问时间具有复杂性O(1)
。在两种情况下,性能都不应成为问题。
自Redis 2.2以来,许多数据类型都经过优化,使用的空间更少 一定的规模。哈希,列表,由整数组成的集合,和 排序集,小于给定数量的元素,最多为a 最大元素大小,以非常高效的内存方式编码 使用的内存最多可减少10倍(使用的内存减少5倍) 平均节省)。
另外,你说:
我们有大约1000万用户。
然后,如果你使用globak密钥空间或哈希值,你应该看看使用Redis Cluster的分片。可能这样你甚至可以优化你的场景。
答案 1 :(得分:1)
晚了3年,但是考虑到@Matias关于使用Redis Cluster进行分片的评论,值得注意的是,分片单位是关键名称。这意味着哈希中的所有值将最终在同一服务器上。因此,对于数百万用户而言,全局密钥空间将允许分片,但不允许散列。