每分钟使用股票价格进行Redis

问题描述

我读了这个问题: Redis key design for real-time stock application 但我的情况略有不同。

我有一个程序在AWS Lambda上运行,每分钟通过API查看大约9000只股票。 我想保存当天交易日每分钟的股票代码(符号),日期时间(至分钟)和价格(最后一分钟的收盘价)。

目标是使插入的程序使用管道进行大容量插入并超快运行。 (通过下面的第一个示例进行操作)。

我已经使用Redis进行简单的键查找,但是这里有一个时间序列。

检索要求将是-以下之一:

  1. 给我所有给定报价的报价(符号),然后以编程方式搜索它们。 或
  2. 为我提供给定股票代码的特定时间间隔,例如1分钟前,5分钟前,10分钟前,1小时前,2小时前...其中大约有17个。

我的第一个想法就是这样做,但是后来我意识到我会为同一把钥匙重复。

redis_key = "ticker:" + objQuote.ticker 
redis_ticker_dict = {
                       "datetime": json_all_date_times['timestampIsoDateTimetoMin'] 
                       "price": objQuote.minuteClose
                     }

然后我的第二个想法就是这样做:

redis_key = "ticker:" + objQuote.ticker + 
            " dateTime:" + json_all_date_times['timestampIsoDateTimetoMin']
redis_ticker_dict = {
                       "price": objQuote.minuteClose
                     }

下面的检索逻辑似乎可以与上面的第二个示例一起使用,只是我第一次尝试,但是不确定其效率如何(当前似乎很缓慢):

ticker_list = ['MSFT','AAPL','TQQQ']
for ticker in ticker_list:
    redis_key_pattern = "ticker:" + ticker + "*"
    for key in redis_obj.scan_iter(redis_key_pattern):
        result = redis_obj.hgetall(key)
        print(key)
        pprint.pprint(result)

然后我认为这是其他人所做的事情,因此我将获得有关如何优化插入和检索结构的建议。

我正在托管的RedisLabs.com上运行,不确定是否可以使用TimeSeries(例如在类似问题中:Is Redis TimeSeries the right tool to capture candle sticks in stock prices

如果RedisLabs支持时间序列,我是否从redis-py切换到redis-timeseries 到https://pypi.org/project/redis-timeseries?同时,我将对此进行试验。我一直在阅读该页面,并且它与大脑如何存储价格没有同步。我没有看到一个简单的示例来说明如何存储密钥和时间的数据。

更新1:

下面是一些我用来测试时序的代码。在循环设置时间并执行GetAll时,它可以在.03秒内检索30个左右的键。进行扫描时,大约需要30秒才能获得每个股票的所有密钥(当前大约60个左右)。

ticker_list = ['MSFT','TQQQ']

doRedisScan = False 
doTickerKeyTest = True

if doRedisScan:
    print("Show Redis Data")
    for ticker in ticker_list:
        print("\n@@@@@ TICKER:",ticker)
        startTimeGetByTicker = time()

        redis_key_pattern = "ticker:" + ticker + "*"
        for key in redis_relatix_obj.scan_iter(redis_key_pattern):
            result = redis_relatix_obj.hgetall(key)
            print(key)
            pprint.pprint(result)

        # stats of retrieval time for all quotes of the ticker/symbol
        endTimeGetByTicker = time()
        elapsedtimeGetByTicker = endTimeGetByTicker - startTimeGetByTicker
        print("Time to get all keys for ticker: elapsedtime=" + str(elapsedtimeGetByTicker) + " seconds")
        print("")

if doTickerKeyTest:
    print("Show Redis Data")
    startDateTimeKey = "2020-10-22T10:"
    startMinute = 25
    stopMinute = 45

    for ticker in ticker_list:
        print("\n##### TICKER:",ticker)
        startTimeGetByTicker = time()

        for min in range(startMinute,stopMinute+1):
            # example key: ticker:MSFT dateTime:2020-10-22T10:32 
            tickerDateTime = startDateTimeKey + str(min).zfill(2)
            redis_key = "ticker:" + ticker + " dateTime:" + tickerDateTime
            print(redis_key)
            result = redis_relatix_obj.hgetall(redis_key)
            pprint.pprint(result)

        # stats of retrieval time for all quotes of the ticker/symbol
        endTimeGetByTicker = time()
        elapsedtimeGetByTicker = endTimeGetByTicker - startTimeGetByTicker
        print("Time to get all keys for ticker: elapsedtime=" + str(elapsedtimeGetByTicker) + " seconds")
        print("")

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)