每分钟都有股价的redis

bf1o4zei  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(312)

我读到这个问题:redis键设计的实时股票应用程序,但我的情况略有不同。
我有一个在aws lambda上运行的程序,每分钟从api上查看大约9000只股票。我想保存当前市场日每分钟的股票代码(符号)、日期时间(到分钟)和价格(最后一分钟的收盘价)。
目标是让insert程序使用管道进行批量插入并运行superfast(使用下面的第一个示例)。
我使用redis进行简单的键查找,但这里有一个时间序列。
检索要求为-以下之一:
给我一个给定的股票代码(符号)的所有引号,然后我将通过编程搜索它们。或
给我一个给定的股票代码的特定间隔,例如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是否可用(就像这个类似的问题:redis timeseries是捕捉股价蜡烛棒的正确工具吗)
如果redislabs支持时间序列,我是否可以从RedisPy切换到RedisTimeSerieshttps://pypi.org/project/redis-timeseries? 与此同时,我将对此进行试验。我一直在看那一页,但它与我的大脑不同步,不知道如何存储价格。我没有看到一个简单的例子如何存储一个键和一个时间的数据。
更新1:
下面是一些我用来测试计时的代码。当循环设置时间并执行getall时,它可以在0.03秒内检索到30个左右的键。进行扫描时,大约需要30秒才能获得每个股票代码的所有键(目前大约60秒)。

ticker_list = ['MSFT', 'AAPL', '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("")

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题