4

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

4

3 回答 3

4

在设计应用程序时,我也面临同样的问题。我选择了简单的一面。我将假设您的二维数据数组代表一个数据库行。我会对它进行 JSON 编码并使用SET. 这使我可以使用MGET,并且MSET当我想使用一个 redis 命令处理多个对象时。如果这些数据在我的数据库中得到更新,我DEL就是关键。对我来说,这比尝试更新 redis 哈希更容易。

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

这是我的哈希示例用例。假设我想在给定用户 ID 的情况下查找用户名。我会的HGET user.usernames 1234。这将给我用户 id 1234 的用户名。如果有遗漏,我将查询数据库并设置它,因为该数据永远不会改变,我永远不会使哈希过期。它允许快速查找公共数据,而不是拉动整个用户、反序列化并返回所需的字段。

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

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

于 2013-05-14T03:33:40.350 回答
1

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

于 2013-05-13T19:37:48.557 回答
1

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

于 2013-05-13T17:23:35.167 回答