Redis TimeSeries OHLCV数据压缩失效:WebSocket股票Tick转1分钟K线排查
Redis TimeSeries 1分钟K线自动生成问题排查
Redis TimeSeries 的 createrule 规则是自动触发的,无需手动执行。当原始时序(NIFTY、NIFTYV)写入新数据时,Redis会自动将数据归入对应1分钟时间桶,按你指定的聚合逻辑(first/max/min/last/sum)计算并写入目标时序(O/H/L/C/V)。
你的压缩未生效,大概率是以下几个原因导致:
时间戳单位不匹配
你设置的桶大小是bucket_size_msec=60000(毫秒级1分钟),需确认WebSocket返回的timestamp是否为毫秒级。如果是秒级时间戳(10位数字),会导致时间桶计算错位,规则无法正确聚合数据。可以将timestamp转换为毫秒后再写入,或者把桶大小改为bucket_size_sec=60(秒级)。目标时序命名冲突
你创建的O、H、L、C、V是全局名称,如果Redis中已有其他时序使用这些名称,会导致聚合数据被覆盖或无法正确写入。建议给目标时序加上前缀,修改后的规则创建代码如下:ts.create('NIFTY_O', labels={'name':inst, 'type':'O'}) ts.create('NIFTY_H', labels={'name':inst, 'type':'H'}) ts.create('NIFTY_L', labels={'name':inst, 'type':'L'}) ts.create('NIFTY_C', labels={'name':inst, 'type':'C'}) ts.create('NIFTY_V', labels={'name':inst, 'type':'V'}) ts.createrule(inst, 'NIFTY_O', 'first', bucket_size_msec=60000) ts.createrule(inst, 'NIFTY_H', 'max', bucket_size_msec=60000) ts.createrule(inst, 'NIFTY_L', 'min', bucket_size_msec=60000) ts.createrule(inst, 'NIFTY_C', 'last', bucket_size_msec=60000) ts.createrule(inst + 'V', 'NIFTY_V', 'sum', bucket_size_msec=60000)规则未正确创建
可以执行以下命令检查规则是否存在且配置正确:# 查看NIFTY的规则 print(ts.listrules(inst)) # 查看NIFTYV的规则 print(ts.listrules(inst + 'V'))如果返回空列表,说明规则创建失败,可能是Redis版本不支持或模块加载问题。
查询方式错误
确认查询目标时序时使用了正确的时间范围。比如查询NIFTY_O时,要覆盖有Tick数据的时间区间,示例查询代码:# 查询最近1小时的开盘价数据 print(ts.range('NIFTY_O', '-3600000', '+'))
内容的提问来源于stack exchange,提问作者Benny Thadikaran
相关产品推荐
相关产品推荐

