|
1 | 1 | from os import getenv |
2 | | -from typing import Callable, Dict, List |
| 2 | +from typing import Callable, Dict, List, Optional |
3 | 3 | from warnings import warn |
4 | 4 |
|
5 | 5 | from redis import Redis |
|
35 | 35 | load_dotenv() |
36 | 36 |
|
37 | 37 |
|
| 38 | +redis_client: Optional[Redis] = None |
| 39 | +async_redis_client: Optional[AsyncRedis] = None |
| 40 | + |
| 41 | + |
38 | 42 | def redis_factory(**kwargs): |
39 | | - return Redis.from_url(REDIS_URL) |
| 43 | + global redis_client |
| 44 | + if redis_client is None: |
| 45 | + redis_client = Redis.from_url(REDIS_URL) |
| 46 | + return redis_client |
40 | 47 |
|
41 | 48 |
|
42 | 49 | def async_redis_factory(**kwargs): |
43 | | - return AsyncRedis.from_url(REDIS_URL) |
| 50 | + global async_redis_client |
| 51 | + if async_redis_client is None: |
| 52 | + async_redis_client = AsyncRedis.from_url(REDIS_URL) |
| 53 | + return async_redis_client |
| 54 | + |
| 55 | + |
| 56 | +async def close_async_redis_client(): |
| 57 | + """关闭全局异步Redis客户端连接""" |
| 58 | + global async_redis_client |
| 59 | + if async_redis_client is not None: |
| 60 | + await async_redis_client.close() |
| 61 | + async_redis_client = None |
44 | 62 |
|
45 | 63 |
|
46 | 64 | MAXSIZE = 8 |
47 | 65 |
|
48 | 66 | REDIS_URL = getenv("REDIS_URL", "redis://") |
| 67 | +REDIS_FACTORY = lambda: Redis.from_url(REDIS_URL) # noqa: E731 |
| 68 | +ASYNC_REDIS_FACTORY = lambda: AsyncRedis.from_url(REDIS_URL) # noqa: E731 |
49 | 69 | REDIS_CLUSTER_NODES = getenv("REDIS_CLUSTER_NODES") |
50 | 70 |
|
51 | 71 |
|
52 | 72 | CACHES = { |
53 | | - "tlru": RedisFuncCache(__name__, LruTPolicy, client=redis_factory, maxsize=MAXSIZE), |
54 | | - "lru": RedisFuncCache(__name__, LruPolicy, client=redis_factory, maxsize=MAXSIZE), |
55 | | - "mru": RedisFuncCache(__name__, MruPolicy, client=redis_factory, maxsize=MAXSIZE), |
56 | | - "rr": RedisFuncCache(__name__, RrPolicy, client=redis_factory, maxsize=MAXSIZE), |
57 | | - "fifo": RedisFuncCache(__name__, FifoPolicy, client=redis_factory, maxsize=MAXSIZE), |
58 | | - "lfu": RedisFuncCache(__name__, LfuPolicy, client=redis_factory, maxsize=MAXSIZE), |
| 73 | + "tlru": RedisFuncCache(__name__, LruTPolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 74 | + "lru": RedisFuncCache(__name__, LruPolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 75 | + "mru": RedisFuncCache(__name__, MruPolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 76 | + "rr": RedisFuncCache(__name__, RrPolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 77 | + "fifo": RedisFuncCache(__name__, FifoPolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 78 | + "lfu": RedisFuncCache(__name__, LfuPolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
59 | 79 | } |
60 | 80 |
|
61 | 81 | MULTI_CACHES = { |
62 | | - "tlru": RedisFuncCache(__name__, LruTMultiplePolicy, client=redis_factory, maxsize=MAXSIZE), |
63 | | - "lru": RedisFuncCache(__name__, LruMultiplePolicy, client=redis_factory, maxsize=MAXSIZE), |
64 | | - "mru": RedisFuncCache(__name__, MruMultiplePolicy, client=redis_factory, maxsize=MAXSIZE), |
65 | | - "rr": RedisFuncCache(__name__, RrMultiplePolicy, client=redis_factory, maxsize=MAXSIZE), |
66 | | - "fifo": RedisFuncCache(__name__, FifoMultiplePolicy, client=redis_factory, maxsize=MAXSIZE), |
67 | | - "lfu": RedisFuncCache(__name__, LfuMultiplePolicy, client=redis_factory, maxsize=MAXSIZE), |
| 82 | + "tlru": RedisFuncCache(__name__, LruTMultiplePolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 83 | + "lru": RedisFuncCache(__name__, LruMultiplePolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 84 | + "mru": RedisFuncCache(__name__, MruMultiplePolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 85 | + "rr": RedisFuncCache(__name__, RrMultiplePolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 86 | + "fifo": RedisFuncCache(__name__, FifoMultiplePolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
| 87 | + "lfu": RedisFuncCache(__name__, LfuMultiplePolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
68 | 88 | } |
69 | 89 |
|
70 | 90 |
|
71 | 91 | ASYNC_CACHES = { |
72 | | - "tlru": RedisFuncCache(__name__, LruTPolicy, client=async_redis_factory, maxsize=MAXSIZE), |
73 | | - "lru": RedisFuncCache(__name__, LruPolicy, client=async_redis_factory, maxsize=MAXSIZE), |
74 | | - "mru": RedisFuncCache(__name__, MruPolicy, client=async_redis_factory, maxsize=MAXSIZE), |
75 | | - "rr": RedisFuncCache(__name__, RrPolicy, client=async_redis_factory, maxsize=MAXSIZE), |
76 | | - "fifo": RedisFuncCache(__name__, FifoPolicy, client=async_redis_factory, maxsize=MAXSIZE), |
77 | | - "lfu": RedisFuncCache(__name__, LfuPolicy, client=async_redis_factory, maxsize=MAXSIZE), |
| 92 | + "tlru": RedisFuncCache(__name__, LruTPolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 93 | + "lru": RedisFuncCache(__name__, LruPolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 94 | + "mru": RedisFuncCache(__name__, MruPolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 95 | + "rr": RedisFuncCache(__name__, RrPolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 96 | + "fifo": RedisFuncCache(__name__, FifoPolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 97 | + "lfu": RedisFuncCache(__name__, LfuPolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
78 | 98 | } |
79 | 99 |
|
80 | 100 |
|
81 | 101 | ASYNC_MULTI_CACHES = { |
82 | | - "tlru": RedisFuncCache(__name__, LruTMultiplePolicy, client=async_redis_factory, maxsize=MAXSIZE), |
83 | | - "lru": RedisFuncCache(__name__, LruMultiplePolicy, client=async_redis_factory, maxsize=MAXSIZE), |
84 | | - "mru": RedisFuncCache(__name__, MruMultiplePolicy, client=async_redis_factory, maxsize=MAXSIZE), |
85 | | - "rr": RedisFuncCache(__name__, RrMultiplePolicy, client=async_redis_factory, maxsize=MAXSIZE), |
86 | | - "fifo": RedisFuncCache(__name__, FifoMultiplePolicy, client=async_redis_factory, maxsize=MAXSIZE), |
87 | | - "lfu": RedisFuncCache(__name__, LfuMultiplePolicy, client=async_redis_factory, maxsize=MAXSIZE), |
| 102 | + "tlru": RedisFuncCache(__name__, LruTMultiplePolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 103 | + "lru": RedisFuncCache(__name__, LruMultiplePolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 104 | + "mru": RedisFuncCache(__name__, MruMultiplePolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 105 | + "rr": RedisFuncCache(__name__, RrMultiplePolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 106 | + "fifo": RedisFuncCache(__name__, FifoMultiplePolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
| 107 | + "lfu": RedisFuncCache(__name__, LfuMultiplePolicy, client=ASYNC_REDIS_FACTORY, maxsize=MAXSIZE), |
88 | 108 | } |
89 | 109 |
|
90 | 110 | CLUSTER_NODES: List[ClusterNode] = [] |
|
0 commit comments