【问题标题】:redis data structure to store stock day return存储股票日收益的redis数据结构
【发布时间】:2018-01-20 00:37:10
【问题描述】:

我有市场的股票每日收益数据,想把它们放到redis中, 当前数据格式为 [stock_id, date, profit], 我最多的操作是从间隔天搜索股票列表,例如 stock_id_list: (203, 512, 532),日期:从'20050101'到'20151231'

如果从mysql查询数据,速度很慢。

希望你帮我设计一个redis数据结构来存储这些数据,并且可以快速查询到

【问题讨论】:

  • 您能否举例说明源数据以及您期望从查询中收到的内容。目前尚不清楚您是想在给定时间内从特定股票中获利还是其他方式

标签: redis


【解决方案1】:

您可以使用排序集。使用日期作为值,并将其他人作为成员变成 json。查询时,使用 zrangebyscore。在 redis ZADD 文档中:

分数值应该是双精度的字符串表示 精度浮点数。 +inf 和 -inf 值是有效值 也是。

因此您应该将日期转换为数字,使用时间戳或天数计算形成早期时间点或将日期更改为数字,例如2017-08-11 至 20170811

需要注意的一点:分数可以重复,但成员不能在排序集中,

如果指定的成员已经是排序集的成员,则更新分数并将元素重新插入到正确的位置以确保正确的排序。

所以你应该添加一个字段使你的股票数据唯一,例如 uuid 或你插入到 redis 中的时间戳。

【讨论】:

  • 谢谢,我担心的最大问题是成员的重复值,你说我可以使用uuid或timestamp,但是与equ返回的只是一个数字相比太大了,并且之后我需要拆分字符串来获取数字的查询,这将是一个很大的成本
  • 正如我的回答所说,当您将库存项目存储到 redis 时,您应该使用 json 转储将您的库存对象(或字典)转换为字符串。当您从 redis 检索时,您还需要将字符串加载到 dict 以获取您想要的信息。序列化和反序列化是不可避免的。因为redis不存储复杂的结构。但实际上时间成本是字符串长度,并没有你想象的那么大。
猜你喜欢
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2020-06-30
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多