如何处理Redis跨多个模块的连接?

pro*_*uga 3 python redis

我正在构建一个使用 Redis 作为数据存储的应用程序。因此,我有许多与 Redis 交互的函数,通常作为一组 Redis 命令的包装器。

随着应用程序的增长超过了我最初的 .py 文件,我不知道如何处理跨多个模块的 Redis 连接。目前,我指向 Redis 连接的指针是在文件顶部声明的,每个函数都假设它存在,而不是将其传递给每个函数。如果我将这些函数分散到多个文件中,那么每个模块都会创建自己的 Redis 指针以供使用,并且应用程序的每个实例都会打开与 Redis 的多个连接。

我希望一个实例只使用同一个连接。

不想这样做:

import redis
class MyApp(object):
    def __init__(self):
        self.r = redis.Redis()
    (all my app functions that touch redis go here)
Run Code Online (Sandbox Code Playgroud)

我也不想将 Redis 指针作为参数传递到每个函数中。

是否有其他方法可以从不同模块获取函数来共享单个 Redis() 实例?

Tom*_*ton 5

像这样的东西:

模块redis_manager

class RedisManager(object):
    def __init__():
        # Connect to redis etc
        self.redis = 12345


redis_manager = RedisManager()
Run Code Online (Sandbox Code Playgroud)

然后在其他模块中,您可以执行以下操作:

from redis_manager import redis_manager

redis_manager.redis.stuff
Run Code Online (Sandbox Code Playgroud)