如何解决每分钟使用股票价格进行Redis
我读了这个问题: Redis key design for real-time stock application 但我的情况略有不同。
我有一个程序在AWS Lambda上运行,每分钟通过API查看大约9000只股票。 我想保存当天交易日每分钟的股票代码(符号),日期时间(至分钟)和价格(最后一分钟的收盘价)。
目标是使插入的程序使用管道进行大容量插入并超快运行。 (通过下面的第一个示例进行操作)。
我已经使用Redis进行简单的键查找,但是这里有一个时间序列。
检索要求将是-以下之一:
我的第一个想法就是这样做,但是后来我意识到我会为同一把钥匙重复。
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 举报,一经查实,本站将立刻删除。