From 23361ac1cacec70b840f497cc35d2f7a5de66387 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期四, 28 十一月 2024 19:11:00 +0800
Subject: [PATCH] redis接口本地化/扫入策略修改

---
 db/redis_manager_delegate.py |   90 +++++++++++++++++++++++++++++++++-----------
 1 files changed, 67 insertions(+), 23 deletions(-)

diff --git a/db/redis_manager_delegate.py b/db/redis_manager_delegate.py
index b6db3aa..4d212b2 100644
--- a/db/redis_manager_delegate.py
+++ b/db/redis_manager_delegate.py
@@ -1,6 +1,8 @@
 """
 redis绠$悊鍣�
 """
+import builtins
+import json
 import logging
 import queue
 import time
@@ -11,6 +13,8 @@
 from log_module import async_log_util
 from log_module.log import logger_redis_debug, logger_system
 from utils import tool, middle_api_protocol
+
+from db import redis_manager
 
 config = constant.REDIS_CONFIG
 
@@ -33,6 +37,9 @@
 
 
 class RedisUtils:
+    # 鏈満鎵цredis
+    __LOCAL_REQUEST = True
+
     __async_task_queue = queue.Queue(maxsize=4096)
 
     @classmethod
@@ -46,33 +53,70 @@
 
     @classmethod
     def __request(cls, db, cmd, key, args=None):
-        data = {
-            "db": db,
-            "cmd": cmd,
-            "key": key,
-        }
-        if args is not None:
-            data["args"] = args
-        fdata = middle_api_protocol.load_redis_cmd(data)
-        result = middle_api_protocol.request(fdata)
-        return result
+        if cls.__LOCAL_REQUEST:
+            redis = RedisManager(db).getRedis()
+            method = getattr(redis_manager.RedisUtils, cmd)
+            args_ = [redis, key]
+            if args is not None:
+                if builtins.type(args) == tuple or builtins.type(args) == list:
+                    args = list(args)
+                    if cmd == "setex":
+                        args_.append(args[0])
+                        if type(args[1]) == list:
+                            args_.append(json.dumps(args[1]))
+                        else:
+                            args_.append(args[1])
+                    else:
+                        for a in args:
+                            args_.append(a)
+                else:
+                    args_.append(args)
+            args_ = tuple(args_)
+            result = method(*args_)
+            if builtins.type(result) == set:
+                result = list(result)
+            return result
+        else:
+            data = {
+                "db": db,
+                "cmd": cmd,
+                "key": key,
+            }
+            if args is not None:
+                data["args"] = args
+            fdata = middle_api_protocol.load_redis_cmd(data)
+            result = middle_api_protocol.request(fdata)
+            return result
 
     # [(db, cmd, key, args)]
     @classmethod
     def __batch__request(cls, odatas):
-        _datas = []
-        for d in odatas:
-            data = {
-                "db": d[0],
-                "cmd": d[1],
-                "key": d[2]
-            }
-            if d[3] is not None:
-                data["args"] = d[3]
-            _datas.append(data)
-        fdata = middle_api_protocol.load_redis_cmds(_datas)
-        results = middle_api_protocol.request(fdata)
-        return results
+        if cls.__LOCAL_REQUEST:
+            result_list = []
+            for d in odatas:
+                db = d[0]
+                cmd = d[1]
+                key = d[2]
+                args = None
+                if d[3] is not None:
+                    args = d[3]
+                result = cls.__request(db, cmd, key, args)
+                result_list.append(result)
+            return result_list
+        else:
+            _datas = []
+            for d in odatas:
+                data = {
+                    "db": d[0],
+                    "cmd": d[1],
+                    "key": d[2]
+                }
+                if d[3] is not None:
+                    data["args"] = d[3]
+                _datas.append(data)
+            fdata = middle_api_protocol.load_redis_cmds(_datas)
+            results = middle_api_protocol.request(fdata)
+            return results
 
     @classmethod
     def __get_db(cls, redis_):

--
Gitblit v1.8.0