redis - Redis:如何计算某个范围内的流中的元素?
问题描述
经营目标
我正在创建一个依赖于一些时间序列的仪表板,我将使用 Redis 来实现它。我是使用 Redis 的新手,我正在尝试使用 Redis-Streams 来计算流中的元素。
XADD conversation:9:chat_messages * id 2583 user_type Bot
XADD conversation:9:chat_messages * id 732016 user_type User
XADD conversation:9:chat_messages * id 732017 user_type Staff
XRANGE conversation:9:chat_messages - +
我知道我可以使用 XLEN 命令获取元素的总数,如下所示:
XLEN conversation:9:chat_messages
但我也想知道一个时期的元素,例如:
XLEN conversation:9:chat_messages 1579551316273 1579551321872
我知道我可以使用 LUA 来计算这些元素,但我想要一些真正快速的方法来实现这一点,而且我知道使用 Redis 标记将是最快的方法。
有没有办法通过直接的 Redis 命令来实现这一点?还是我必须编写一个 Lua 脚本才能做到这一点?
附加信息
我受 AWS 的 ElastiCache 限制只能使用 Redis 5.0.6,我无法安装其他模块,例如RedisTimeSeries模块。我想使用该模块,但目前不可能。
解决方案
虽然 Redis Stream 数据结构不支持这一点,但您可以在它旁边使用一个 Sorted Set 来跟踪消息范围。
基本上,对于您从中获得的每个消息 ID XADD
- 例如“1579551316273-0” - 您需要执行ZADD conversation:9:ids 0 1579551316273-0
. 然后,您可以使用ZLEXCOUNT
来获取范围的“长度”。
推荐阅读
- javascript - 理解 Typescript 中的 React EventHandlers
- python - 获取时间戳在不规则时间间隔 pandas 内的行(时间序列)
- laravel - 请求关于在 Laravel 中接收令牌错误的指导
- python - 为什么 python lambda 看到的是一个系列而不是一个值?
- java - Springboot URl 映射
- jquery - 在 ASP.NET Core 中的下拉值更改时从数据库中获取值
- c - 使用 pthread 库在线程之间进行同步
- python - 如何计算数据集的元素由列表组成
- python - 如何使用 pyodbc 在嵌套循环中调用不同的查询
- javascript - Vanilla JavaScript:如何搜索对象数组,键是数组