From 72149b3076983701b17f3dc55fd3ca60243c1f58 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 08 八月 2023 10:42:42 +0800
Subject: [PATCH] redis异步数据提交

---
 code_attribute/limit_up_time_manager.py |   62 +++++++++++++++++++-----------
 1 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/code_attribute/limit_up_time_manager.py b/code_attribute/limit_up_time_manager.py
index d839725..15e9f04 100644
--- a/code_attribute/limit_up_time_manager.py
+++ b/code_attribute/limit_up_time_manager.py
@@ -6,36 +6,52 @@
 from db.redis_manager import RedisUtils
 from utils import global_util, tool
 
-_redisManager = redis_manager.RedisManager(0)
 
+class LimitUpTimeManager:
+    __limit_up_time_cache = {}
+    _redisManager = redis_manager.RedisManager(0)
+    __instance = None
 
-def save_limit_up_time(code, time):
-    _time = get_limit_up_time(code)
-    if _time is None:
-        RedisUtils.setex(
-            _redisManager.getRedis(), "limit_up_time-{}".format(code), tool.get_expire(), time)
-        global_util.limit_up_time[code] = time
+    def __new__(cls, *args, **kwargs):
+        if not cls.__instance:
+            cls.__instance = super(LimitUpTimeManager, cls).__new__(cls, *args, **kwargs)
+            cls.load_limit_up_time()
+        return cls.__instance
 
+    @classmethod
+    def load_limit_up_time(cls):
+        redis = cls._redisManager.getRedis()
+        try:
+            keys = RedisUtils.keys(redis, "limit_up_time-*", auto_free=False)
+            for key in keys:
+                code = key.replace("limit_up_time-", "")
+                time_ = RedisUtils.get(redis, key, auto_free=False)
+                global_util.limit_up_time[code] = time_
+                tool.CodeDataCacheUtil.set_cache(cls.__limit_up_time_cache, code, time_)
+        finally:
+            RedisUtils.realse(redis)
 
-def get_limit_up_time(code):
-    time = global_util.limit_up_time.get(code)
-    if time is None:
-        time = RedisUtils.get(_redisManager.getRedis(), "limit_up_time-{}".format(code))
-        if time is not None:
+    def save_limit_up_time(self, code, time):
+        cache_result = tool.CodeDataCacheUtil.get_cache(self.__limit_up_time_cache, code)
+        if not cache_result[0] or cache_result[1] is None:
             global_util.limit_up_time[code] = time
+            tool.CodeDataCacheUtil.set_cache(self.__limit_up_time_cache, code, time)
+            RedisUtils.setex_async(
+                self._redisManager.getRedis(), "limit_up_time-{}".format(code), tool.get_expire(), time)
 
-    return time
+    def get_limit_up_time(self, code):
+        time = global_util.limit_up_time.get(code)
+        if time is None:
+            time = RedisUtils.get(self._redisManager.getRedis(), "limit_up_time-{}".format(code))
+            if time is not None:
+                global_util.limit_up_time[code] = time
+        return time
 
-
-def load_limit_up_time():
-    redis = _redisManager.getRedis()
-    try:
-        keys = RedisUtils.keys(redis, "limit_up_time-*", auto_free=False)
-        for key in keys:
-            code = key.replace("limit_up_time-", "")
-            global_util.limit_up_time[code] = RedisUtils.get(redis, key, auto_free=False)
-    finally:
-        RedisUtils.realse(redis)
+    def get_limit_up_time_cache(self, code):
+        cache_result = tool.CodeDataCacheUtil.get_cache(self.__limit_up_time_cache, code)
+        if cache_result[0]:
+            return cache_result[1]
+        return None
 
 
 if __name__ == "__main__":

--
Gitblit v1.8.0