微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决每分钟使用股票价格进行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 举报,一经查实,本站将立刻删除。