我有一个二维数组存储在redis中,我看到两种解决方案:将其存储为JSON字符串或每行存储一个哈希。哪种方法更好?在redis中存储二维数组
回答
在设计应用程序时,我遇到了同样的问题。我选择了简单的一面。我将假设你的2d数据数组表示一个数据库行。我会JSON编码并使用SET
进行存储。这允许我在使用一个redis命令处理多个对象时使用MGET
和MSET
。如果这个数据在我的数据库中得到更新,我的密钥是DEL
。对我来说,这比尝试更新redis散列更容易。
redis中的哈希值有其优点。由于redis使用“ziplist”编码,它们通常会占用较少的内存。您也可以避免序列化,这对于某些应用程序可能非常重要。
下面是一个用于我的散列的示例用例。假设我想要查看给定用户名的用户名。我会做HGET user.usernames 1234
。这会给我用户名为1234的用户名。如果没有,我会查询数据库并设置它,并且因为数据永远不会改变,所以我永远不会过期哈希。它允许快速查找常见的数据,而不是拉动整个用户,反序列化并返回所需的字段。
对于一个预期的大量查找表,我使用这里提出的算法:http://redis.io/topics/memory-optimization 它使用多个散列,好像有一个哈希,并利用ziplist编码来节省内存。
无论您选择哪种方法,只需保持一致。
感谢您使用redis文档的链接,它让我意识到我可以使用'SETRANGE'和'GETRANGE'命令来执行我需要的功能。我需要存储的2D数组仅包含0到9之间的数字,因此我可以存储唯一的字符串,并将我的数组的行连接起来。这种方法非常快。 – 2013-05-16 07:55:03
如何使用Redis lists?不支持列表列表,但可以为每个列表条目存储一行,或者构建引用其他列表的键列表。
您可以将每个元素存储在自己的键中。只需要命名键名,以便名称包含元素的索引,也可以是数组的维数。
- 1. 将数据存储到二维数组
- 2. JavaScript将数据存储在二维数组中
- 3. 使用二维数组在mysql中存储数据
- 4. 我们可以存储多维数组在Redis的
- 5. 如何将二维数组存储在Perl中的散列中?
- 6. 在Cookie中存储Javascript中的二维数组
- 7. 如何使用C#将二维数组存储在postgresql中?
- 8. 如何在numpy二维数组中存储列表?
- 9. 在ArrayList中存储二维数组索引?
- 10. 如何在二维字符数组中存储字符
- 11. 是否有可能将二维数组存储在info.plist中
- 12. 在二维数组中存储字符串和字符(C)
- 13. C在动态二维数组中存储字符串文字
- 14. 将对象属性存储在二维数组中
- 15. 将目录及其文件存储在二维数组中VB2008
- 16. 如何在Matlab中将二维矩阵序列存储到三维数组中?
- 17. 翻转存储在F#中的一维数组中的二维“图像”
- 18. 如何转置二维矩阵存储为C一维数组
- 19. JS调用函数存储在二维数组
- 20. 在MySQL中存储二进制数组
- 21. 如何存储二维数组坐标列表中的Java
- 22. 如何存储在PHP空二维数组具有20×20大小的二维数组
- 23. 将二维字符串数组存储到SQLite数据库
- 24. 从文件存储整数二维数组
- 25. 二维数组
- 26. 二维数组
- 27. 二维数组
- 28. 如何在MATLAB中将图像信息存储在二维数组中?
- 29. 保存数值二维数组图像
- 30. 在C中分配二维数组中的一维数组#
你可以管理你的redis读/写吗?这似乎是基准测试的合适情况。 – sberry 2013-05-13 16:41:59
是的,我可以管道读/写 – 2013-05-13 16:51:37
“更好”取决于你的形象模式。一次读取或更新一行或一列是否有意义?你会一直保存/阅读整个表吗?你正在优化传输速度吗?序列化速度?存储大小? – Triptych 2013-05-13 17:27:25