Redis:应用实践之时序数据的保存

【关于作者】

关于作者,目前在蚂蚁金服搬砖任职,在支付宝营销投放领域工作了多年,目前在专注于内存数据库相关的应用学习,如果你有任何技术交流或大厂内推及面试咨询,都可以从我的个人博客(https://0522-isniceday.top/)联系我

时序数据有如下几个要点:

1.插入比较频繁,更新比较少

2.具有按照时间顺序排序的要求

3.需要支持聚合,或查询某个时间段

1.基于Hash和Sorted Set(zset)保存时间序列数据

1.1.解决方案

利用hash的二级key作为时间,二级value存储数据可以解决插入频繁,查找快速的问题,但是没有按照时间排序,以及支持聚合,这个时候就可以引入zset解决该问题,但是此时会出现同时插入hash和zset的原子性问题

1.2.难点

(1)原子性问题解决:

MULTI和EXEC命令的使用:

MULTI:表示一系列原子性操作的开始。接收到该命令代表接下来的指令都会放到内部队列中,后续一起执行保证原子性

EXEC:代表原子性操作的结束

img

(2)如何解决大数据量下的聚合问题

虽然zset结构可以解决范围查询,但是数据量过大则会导致数据传输过程中导致操作系统竞争资源,会变得很缓慢。

此时可以引入RedisTimeSeries来保存时序数据

2.基于RedisTimeSeries模块保存时间序列数据

edisTimeSeries是Redis的一个扩展模块。它专门面向时间序列数据提供了数据类型和访问接口,并且支持在Redis实例上直接对数据进行按时间范围的聚合计算。

因为RedisTimeSeries不属于Redis的内建功能模块,在使用时,我们需要先把它的源码单独编译成动态链接库redistimeseries.so,再使用loadmodule命令进行加载,如下所示:

loadmodule redistimeseries.so

当用于时间序列数据存取时,RedisTimeSeries的操作主要有5个:

  • 用TS.CREATE命令创建时间序列数据集合;
  • 用TS.ADD命令插入数据;
  • 用TS.GET命令读取最新数据;
  • 用TS.MGET命令按标签过滤查询数据集合;
  • 用TS.RANGE支持聚合计算的范围查询。

我认为真正的时序数据库的场景可能不会真正的使用redis,而是会使用influxdb、普罗米修斯等替代

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈哈张大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值