|
1 | 1 | import asyncio |
2 | 2 | import atexit |
3 | 3 | from os import getenv |
4 | | -from typing import Optional |
| 4 | +from typing import Callable, Dict, List, Optional |
5 | 5 | from warnings import warn |
6 | 6 |
|
7 | 7 | from redis import Redis |
8 | 8 | from redis.asyncio import Redis as AsyncRedis |
| 9 | +from redis.cluster import ClusterNode, RedisCluster |
9 | 10 |
|
10 | 11 | from redis_func_cache import ( |
11 | 12 | FifoClusterMultiplePolicy, |
|
22 | 23 | RrClusterMultiplePolicy, |
23 | 24 | RrPolicy, |
24 | 25 | ) |
25 | | -from redis_func_cache.policies.fifo import FifoMultiplePolicy |
26 | | -from redis_func_cache.policies.lfu import LfuMultiplePolicy |
27 | | -from redis_func_cache.policies.lru import LruMultiplePolicy, LruTMultiplePolicy |
28 | | -from redis_func_cache.policies.mru import MruMultiplePolicy |
29 | | -from redis_func_cache.policies.rr import RrMultiplePolicy |
| 26 | +from redis_func_cache.policies.fifo import FifoClusterPolicy, FifoMultiplePolicy |
| 27 | +from redis_func_cache.policies.lfu import LfuClusterPolicy, LfuMultiplePolicy |
| 28 | +from redis_func_cache.policies.lru import LruClusterPolicy, LruMultiplePolicy, LruTClusterPolicy, LruTMultiplePolicy |
| 29 | +from redis_func_cache.policies.mru import MruClusterPolicy, MruMultiplePolicy |
| 30 | +from redis_func_cache.policies.rr import RrClusterPolicy, RrMultiplePolicy |
30 | 31 |
|
31 | 32 | try: |
32 | 33 | from dotenv import load_dotenv |
@@ -69,6 +70,35 @@ async def close_async_redis_client(): |
69 | 70 | ASYNC_REDIS_FACTORY = lambda: AsyncRedis.from_url(REDIS_URL) # noqa: E731 |
70 | 71 | REDIS_CLUSTER_NODES = getenv("REDIS_CLUSTER_NODES") |
71 | 72 |
|
| 73 | +# 解析 Redis 集群节点 |
| 74 | +CLUSTER_NODES: List[ClusterNode] = [] |
| 75 | +CLUSTER_CACHES: Dict[str, RedisFuncCache] = {} |
| 76 | +CLUSTER_MULTI_CACHES: Dict[str, RedisFuncCache] = {} |
| 77 | + |
| 78 | +if REDIS_CLUSTER_NODES: |
| 79 | + CLUSTER_NODES = [ |
| 80 | + ClusterNode(cluster.split(":")[-2], int(cluster.split(":")[-1])) for cluster in REDIS_CLUSTER_NODES.split() |
| 81 | + ] |
| 82 | + REDIS_CLUSTER_FACTORY: Callable[[], RedisCluster] = lambda: RedisCluster(startup_nodes=CLUSTER_NODES) # type: ignore[abstract] # noqa: E731 |
| 83 | + |
| 84 | + CLUSTER_CACHES = { |
| 85 | + "tlru": RedisFuncCache(__name__, LruTClusterPolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 86 | + "lru": RedisFuncCache(__name__, LruClusterPolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 87 | + "mru": RedisFuncCache(__name__, MruClusterPolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 88 | + "rr": RedisFuncCache(__name__, RrClusterPolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 89 | + "fifo": RedisFuncCache(__name__, FifoClusterPolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 90 | + "lfu": RedisFuncCache(__name__, LfuClusterPolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 91 | + } |
| 92 | + |
| 93 | + CLUSTER_MULTI_CACHES = { |
| 94 | + "tlru": RedisFuncCache(__name__, LruTClusterMultiplePolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 95 | + "lru": RedisFuncCache(__name__, LruClusterMultiplePolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 96 | + "mru": RedisFuncCache(__name__, MruClusterMultiplePolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 97 | + "rr": RedisFuncCache(__name__, RrClusterMultiplePolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 98 | + "fifo": RedisFuncCache(__name__, FifoClusterMultiplePolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 99 | + "lfu": RedisFuncCache(__name__, LfuClusterMultiplePolicy, client=REDIS_CLUSTER_FACTORY, maxsize=MAXSIZE), |
| 100 | + } |
| 101 | + |
72 | 102 |
|
73 | 103 | CACHES = { |
74 | 104 | "tlru": RedisFuncCache(__name__, LruTPolicy, client=REDIS_FACTORY, maxsize=MAXSIZE), |
|
0 commit comments