From 783f6b0c18272b7f9ee988664c4194ecc80e23a7 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期四, 03 八月 2023 14:21:45 +0800
Subject: [PATCH] redis上级缓存添加

---
 trade/trade_data_manager.py |   37 ++++++++++++++++++++++++++++++++-----
 1 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/trade/trade_data_manager.py b/trade/trade_data_manager.py
index 6d7e1b3..252e61f 100644
--- a/trade/trade_data_manager.py
+++ b/trade/trade_data_manager.py
@@ -161,7 +161,18 @@
 
 # 浠g爜瀹炴椂浠锋牸绠$悊鍣�
 class CodeActualPriceProcessor:
-    __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 = {}
+
+        return cls.__instance
 
     def __get_redis(self):
         return self.__redisManager.getRedis()
@@ -169,15 +180,25 @@
     # 淇濆瓨璺屼环鐨勬椂闂�
     def __save_down_price_time(self, code, time_str):
         key = "under_water_last_time-{}".format(code)
+        tool.CodeDataCacheUtil.set_cache(self.__under_water_last_time_cache, code, time_str)
         RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), time_str)
 
     def __remove_down_price_time(self, code):
         key = "under_water_last_time-{}".format(code)
+        tool.CodeDataCacheUtil.clear_cache(self.__under_water_last_time_cache, code)
         RedisUtils.delete(self.__get_redis(), key)
 
     def __get_last_down_price_time(self, code):
         key = "under_water_last_time-{}".format(code)
         return RedisUtils.get(self.__get_redis(), key)
+
+    def __get_last_down_price_time_cache(self, code):
+        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
 
     def __increment_down_price_time(self, code, seconds):
         key = "under_water_seconds-{}".format(code)
@@ -212,6 +233,7 @@
 
     # 淇濆瓨褰撳墠娑ㄥ箙
     def __save_current_rate(self, 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)
 
@@ -224,7 +246,12 @@
         return None
 
     def get_current_rate(self, code):
-        return self.__get_current_rate(code)
+        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
 
     def process_rate(self, code, rate, time_str):
         # 淇濆瓨鐩墠鐨勪唬鐮佹定骞�
@@ -234,7 +261,7 @@
             return
         # now_str = tool.get_now_time_str()
         if rate >= 0:
-            down_start_time = self.__get_last_down_price_time(code)
+            down_start_time = self.__get_last_down_price_time_cache(code)
             if down_start_time is None:
                 return
             else:
@@ -245,7 +272,7 @@
                 self.__remove_down_price_time(code)
         else:
             # 璁板綍寮�濮嬪��
-            if self.__get_last_down_price_time(code) is None:
+            if self.__get_last_down_price_time_cache(code) is None:
                 self.__save_down_price_time(code, time_str)
 
     # 淇濆瓨鐜颁环
@@ -292,7 +319,7 @@
         infos = []
         for k in keys:
             code = k.split("-")[1]
-            rate = self.__get_current_rate(code)
+            rate = self.get_current_rate(code)
             infos.append((code, rate))
         # 鎺掑簭淇℃伅
         sorted_infos = sorted(infos, key=lambda tup: tup[1], reverse=True)

--
Gitblit v1.8.0