我读到这个问题: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("")
暂无答案!
目前还没有任何答案,快来回答吧!