时间序列数据的读写特点
写入特点
- 插入数据快
- 要求我们选择的数据类型,在进行数据插入时,复杂度要低,尽量不要阻塞
读特点
- 查询单条记录
- 查询时间范围内的数据
- 对某个时间范围内的数据进行聚合计算
- 均值
- 最大、最小值
- 求和
保存时间序列数据的两种方案
- Hash 和 Sorted Set
- RedisTimeSeries
基于 Hash 和 Sorted Set 保存时间序列数据
- 优点
- Redis 内在的数据类型,代码成熟和性能稳定
- 系统稳定性是可以预期
- 缺点
- 如果我们需要进行大量的聚合计算,同时网络带宽条件不是太好时,Hash 和 Sorted Set 的组合就不太适合了。此时,使用 RedisTimeSeries 就更加合适一些。
Redis 是怎么保证原子性操作?
Redis 用来实现简单的事务的 MULTI 和 EXEC 命令。当多个命令及其参数本身无误时,MULTI 和 EXEC 命令可以保证执行这些命令时的原子性。
- MULTI 命令:表示一系列原子性操作的开始。收到这个命令后,Redis 就知道,接下来再收到的命令需要放到一个内部队列中,后续一起执行,保证原子性。
- EXEC 命令:表示一系列原子性操作的结束。一旦 Redis 收到了这个命令,就表示所有要保证原子性的命令操作都已经发送完成了。此时,Redis 开始执行刚才放到内部队列中的所有命令操作。
为了避免客户端和 Redis 实例间频繁的大量数据传输,我们可以使用 RedisTimeSeries 来保存时间序列数据。