gpt4 book ai didi

node.js - 在 Redis 中存储二维数组的最佳方式是什么?

转载 作者:可可西里 更新时间:2023-11-01 11:04:26 25 4
gpt4 key购买 nike

我想存储如下所示的数据:

{ 
20160120: [
["slug", "title", "date"],
["slug", "title", "date"],
["slug", "title", "date"]
]
}

在 Redis 中执行此操作的最佳方法是什么?

最佳答案

每次考虑 Redis 中的一些复杂结构时,您都应该考虑正确的分解。

使用 LIST 输入数据

如果您的数据具有规则结构(如 python 中的 named tuple)- 使用 LIST 进行存储(more about this):

LPUSH entry:20160120:0 slug title date
LPUSH entry:20160120:1 slug title date
LPUSH entry:20160120:2 slug title date

这给了你

  1. 最节省 RAM 的数据存储方式。
  2. 最快的迭代速度。

如果您的数据具有非常规结构 - 您将按照@h0x91B 的答案进行哈希处理。

第一维度?

是的,您可以按照 @h0x91B 的建议使用 ZSET,但是如果您不打算从第一维中删除条目,您可以使用普通增量键来保持最大索引 - INCE ARRAY:20160120 1。像 max count 模式一样使用它,因为在大多数情况下,您可以只读取第二维数据而无需实际检查该数据是否存在。

例如对于 LIST 情况(LUA 代码,KEYS 是 20160120):

  local maxCount = redis.call("GET", KEYS[1]);
local ret = {};
for i = 0, maxCount, 1 do
table.insert(ret, redis.call("LRANGE", "entry:" .. KEYS[1] .. ":" .. i, 0, -1);
end
return ret ;

ZSET方式?

这种方式有点硬核,但允许您在一个查询中存储和获取数据,并将所有数据保存在一个排序集中。此外,如果您有数百万个条目(Redis 中的简单键太多 can be a problem ),它可能会节省更多 RAM。所以ZRANGEBYLEX的方式:

       |- key for your array
| |- index in first dimenstion
| | |-search pattern as first dimenstion key
| | | |-actual value
ZADD entry 0 20160120:slug
ZADD entry 0 20160120:title
ZADD entry 0 20160120:date

然后查询,例如索引 2 和 20160120 日期的所有数据:

ZRANGEBYLEX entry[20160120: + 

关于node.js - 在 Redis 中存储二维数组的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34902146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com