From ba2f7b998e5e3f6223c11e804c7922a8070426a0 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期二, 08 八月 2023 15:19:55 +0800 Subject: [PATCH] 单例+缓存优化 --- trade/trade_data_manager.py | 50 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 32 insertions(+), 18 deletions(-) diff --git a/trade/trade_data_manager.py b/trade/trade_data_manager.py index debc1e3..450169b 100644 --- a/trade/trade_data_manager.py +++ b/trade/trade_data_manager.py @@ -155,22 +155,40 @@ # 浠g爜瀹炴椂浠锋牸绠$悊鍣� class CodeActualPriceProcessor: + __under_water_last_time_cache = {} + __code_current_rate_cache = {} + __code_current_rate_latest = {} + __db = 0 + __redisManager = redis_manager.RedisManager(0) __instance = None def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = super(CodeActualPriceProcessor, cls).__new__(cls, *args, **kwargs) - # 鍒濆鍖栬缃� - # 鑾峰彇浜ゆ槗绐楀彛鐨勯攣 - cls.__instance.__redisManager = redis_manager.RedisManager(0) - cls.__instance.__under_water_last_time_cache = {} - cls.__instance.__code_current_rate_cache = {} - cls.__instance.__code_current_rate_latest = {} - + cls.__load_datas() return cls.__instance - def __get_redis(self): - return self.__redisManager.getRedis() + @classmethod + def __get_redis(cls): + return cls.__redisManager.getRedis() + + @classmethod + def __load_datas(cls): + __redis = cls.__get_redis() + try: + keys = RedisUtils.keys(__redis, "under_water_last_time-*") + for k in keys: + code = k.split("-")[-1] + val = RedisUtils.get(__redis, k) + tool.CodeDataCacheUtil.set_cache(cls.__under_water_last_time_cache, code, val) + + keys = RedisUtils.keys(__redis, "code_current_rate-*") + for k in keys: + code = k.split("-")[-1] + val = RedisUtils.get(__redis, k) + tool.CodeDataCacheUtil.set_cache(cls.__code_current_rate_cache, code, float(val)) + finally: + RedisUtils.realse(__redis) # 淇濆瓨璺屼环鐨勬椂闂� def __save_down_price_time(self, code, time_str): @@ -191,9 +209,7 @@ cache_result = tool.CodeDataCacheUtil.get_cache(self.__under_water_last_time_cache, code) if cache_result[0]: return cache_result[1] - val = self.__get_last_down_price_time(code) - tool.CodeDataCacheUtil.set_cache(self.__under_water_last_time_cache, code, val) - return val + return None def __increment_down_price_time(self, code, seconds): key = "under_water_seconds-{}".format(code) @@ -234,7 +250,7 @@ self.__code_current_rate_latest[code] = rate tool.CodeDataCacheUtil.set_cache(self.__code_current_rate_cache, code, rate) key = "code_current_rate-{}".format(code) - RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), rate) + RedisUtils.setex_async(self.__db, key, tool.get_expire(), rate) # 鎵归噺淇濆瓨 def __save_current_rates(self, datas): @@ -261,9 +277,7 @@ cache_result = tool.CodeDataCacheUtil.get_cache(self.__code_current_rate_cache, code) if cache_result[0]: return cache_result[1] - val = self.__get_current_rate(code) - tool.CodeDataCacheUtil.set_cache(self.__code_current_rate_cache, code, val) - return val + return None def process_rate(self, code, rate, time_str): # 淇濆瓨鐩墠鐨勪唬鐮佹定骞� @@ -372,7 +386,7 @@ class PlaceOrderCountManager: __db = 0 __redisManager = redis_manager.RedisManager(0) - __place_order_count_cache={} + __place_order_count_cache = {} __instance = None def __new__(cls, *args, **kwargs): @@ -414,7 +428,7 @@ return 0 def __get_place_order_count_cache(self, code): - cache_result = tool.CodeDataCacheUtil.get_cache(self.__place_order_count_cache,code) + cache_result = tool.CodeDataCacheUtil.get_cache(self.__place_order_count_cache, code) if cache_result[0]: return cache_result[1] return 0 -- Gitblit v1.8.0