将二维数组存储在redis中

时间:2013-05-13 16:35:50

标签: database redis

我有一个2D数组存储在redis中,我看到两个解决方案:将其存储为JSON字符串或每行存储一个哈希。哪种方式更好?

3 个答案:

答案 0 :(得分:3)

在设计应用程序时我遇到了同样的问题。我选择了简单的一面。我将假设你的2D数据数组代表一个数据库行。我会JSON编码并使用SET存储它。当我想使用一个redis命令处理多个对象时,这允许我使用MGETMSET。如果此数据在我的数据库中更新,我DEL键。对我来说,这比尝试更新redis哈希更容易。

redis中的哈希有其优点。由于redis使用的“ziplist”编码,它们通常会占用更少的内存。您也可以避免序列化,这对某些应用程序来说非常重要。

这是我的哈希示例用例。假设我想要一个用户ID查找用户名。我会做HGET user.usernames 1234。这将为我提供用户ID 1234的用户名。如果有未命中,我将查询数据库并设置它,因为该数据永远不会更改,我永远不会使哈希到期。它允许快速查找共同的数据,而不是拉动整个用户,反序列化并返回所需的字段。

对于预期的大规模查找表,我使用此处的算法:http://redis.io/topics/memory-optimization 它使用多个哈希,就像有一个哈希,并利用ziplist编码来节省内存。

无论您选择哪种方法,都要保持一致。

答案 1 :(得分:1)

如何使用Redis lists?不支持列表列表,但您可以为每个列表条目存储一行,或者构建引用其他列表的键列表。

答案 2 :(得分:1)

您可以将每个元素存储在自己的键中。只需命名键,使名称包含元素的索引,也可以包含数组的维度。