使用 ReJSON 从 Redis 获取元素范围
Get range of elements from redis using ReJSON
所以在 json 中我们有一个名为 items 的键,它实际上包含一个元素数组,现在我们可以使用 [=10= 从该数组中获取选择性索引].
但在我们的例子中,我们需要从这个数组中获取一个范围,比如索引为 0-10、10-20 等 的元素,以便我们不不必在代码中获取完整数据然后过滤结果。
我正在寻找它的原因是,如果我们正在读取整个列表,那么由于数据大小会很大,数据传输延迟会增加,因为 API 使用它和 redis 服务器不在同一个实例上另外,如果可能,不必在代码中执行此操作更有意义。
首先,这是否可能?如果是,我们如何实现?
RedisJSON 不支持完整的 JSONPath 语法,只支持简单的单一路径。
但是,您可以利用 Redis 管道支持来获得足够好的结果,以非阻塞方式发送以下内容:
JSON.GET employees-list .items[1]
JSON.GET employees-list .items[2]
JSON.GET employees-list .items[3]
另一方面,RedisJSON2 具有完整的 JSONPath 支持并支持此类查询,但目前为了向后兼容,它仅 returns 第一个元素(如 RedisJSON).大概下周会加入这种支持吧
所以在 json 中我们有一个名为 items 的键,它实际上包含一个元素数组,现在我们可以使用 [=10= 从该数组中获取选择性索引].
但在我们的例子中,我们需要从这个数组中获取一个范围,比如索引为 0-10、10-20 等 的元素,以便我们不不必在代码中获取完整数据然后过滤结果。
我正在寻找它的原因是,如果我们正在读取整个列表,那么由于数据大小会很大,数据传输延迟会增加,因为 API 使用它和 redis 服务器不在同一个实例上另外,如果可能,不必在代码中执行此操作更有意义。
首先,这是否可能?如果是,我们如何实现?
RedisJSON 不支持完整的 JSONPath 语法,只支持简单的单一路径。 但是,您可以利用 Redis 管道支持来获得足够好的结果,以非阻塞方式发送以下内容:
JSON.GET employees-list .items[1]
JSON.GET employees-list .items[2]
JSON.GET employees-list .items[3]
另一方面,RedisJSON2 具有完整的 JSONPath 支持并支持此类查询,但目前为了向后兼容,它仅 returns 第一个元素(如 RedisJSON).大概下周会加入这种支持吧