From ba2f7b998e5e3f6223c11e804c7922a8070426a0 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 08 八月 2023 15:19:55 +0800
Subject: [PATCH] 单例+缓存优化

---
 l2/transaction_progress.py |   48 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/l2/transaction_progress.py b/l2/transaction_progress.py
index 1f991b4..1ab727f 100644
--- a/l2/transaction_progress.py
+++ b/l2/transaction_progress.py
@@ -13,63 +13,83 @@
 import l2.l2_data_util
 from log_module.log import logger_l2_trade_buy_queue, logger_l2_trade_buy_progress
 
-buy_progress_index_cache = {}
-
 
 class TradeBuyQueue:
+    buy_progress_index_cache = {}
+
     __db = 0
     __redis_manager = redis_manager.RedisManager(0)
+    __instance = None
+
+    def __new__(cls, *args, **kwargs):
+        if not cls.__instance:
+            cls.__instance = super(TradeBuyQueue, cls).__new__(cls, *args, **kwargs)
+            cls.__load_datas()
+        return cls.__instance
 
     def __init__(self):
         self.last_buy_queue_data = {}
 
-    def __getRedis(self):
-        return self.__redis_manager.getRedis()
+    @classmethod
+    def __get_redis(cls):
+        return cls.__redis_manager.getRedis()
+
+    @classmethod
+    def __load_datas(cls):
+        __redis = cls.__get_redis()
+        try:
+            keys = RedisUtils.keys(__redis, "trade_buy_progress_index-*")
+            for k in keys:
+                code = k.split("-")[-1]
+                val = RedisUtils.get(__redis, k)
+                val = json.loads(val)
+                tool.CodeDataCacheUtil.set_cache(cls.buy_progress_index_cache, code, val)
+
+        finally:
+            RedisUtils.realse(__redis)
 
     def __save_buy_queue_data(self, code, num_list):
         key = "trade_buy_queue_data-{}".format(code)
-        RedisUtils.setex(self.__getRedis(), key, tool.get_expire(), json.dumps((num_list, tool.get_now_time_str())))
+        RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), json.dumps((num_list, tool.get_now_time_str())))
 
     # 杩斿洖鏁版嵁涓庢洿鏂版椂闂�
     def __get_buy_queue_data(self, code):
         key = "trade_buy_queue_data-{}".format(code)
-        val = RedisUtils.get(self.__getRedis(), key)
+        val = RedisUtils.get(self.__get_redis(), key)
         if val is None:
             return None, None
         val = json.loads(val)
         return val[0], [1]
 
     def __save_buy_progress_index(self, code, index, is_default):
-        tool.CodeDataCacheUtil.set_cache(buy_progress_index_cache, code, (index, is_default))
+        tool.CodeDataCacheUtil.set_cache(self.buy_progress_index_cache, code, (index, is_default))
         key = "trade_buy_progress_index-{}".format(code)
         RedisUtils.setex_async(self.__db, key, tool.get_expire(), json.dumps((index, is_default)))
         # 杩斿洖鏁版嵁涓庢洿鏂版椂闂�
 
     def __get_buy_progress_index(self, code):
         key = "trade_buy_progress_index-{}".format(code)
-        val = RedisUtils.get(self.__getRedis(), key)
+        val = RedisUtils.get(self.__get_redis(), key)
         if val is None:
             return None, True
         val = json.loads(val)
         return int(val[0]), bool(val[1])
 
     def __get_buy_progress_index_cache(self, code):
-        cache_result = tool.CodeDataCacheUtil.get_cache(buy_progress_index_cache, code)
+        cache_result = tool.CodeDataCacheUtil.get_cache(self.buy_progress_index_cache, code)
         if cache_result[0]:
             return cache_result[1]
-        val = self.__get_buy_progress_index(code)
-        tool.CodeDataCacheUtil.set_cache(buy_progress_index_cache, code, val)
-        return val
+        return None, True
 
     # 鏈�杩戠殑闈炴定鍋滀拱1鐨勬椂闂�
     def __save_latest_not_limit_up_time(self, code, time_str):
         key = "latest_not_limit_up_time-{}".format(code)
-        RedisUtils.setex(self.__getRedis(), key, tool.get_expire(), time_str)
+        RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), time_str)
 
     def __get_latest_not_limit_up_time(self, code):
         key = "latest_not_limit_up_time-{}".format(code)
         if not constant.TEST:
-            return RedisUtils.get(self.__getRedis(), key)
+            return RedisUtils.get(self.__get_redis(), key)
         return None
 
     # 淇濆瓨鏁版嵁,杩斿洖淇濆瓨鏁版嵁鐨勬潯鏁�

--
Gitblit v1.8.0