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