Skip to content

Commit 5a79e49

Browse files
committed
bugfix(test): restore support for Redis cluster testing
- Extend ruff.toml to include tests directory - Update _catches.py to support Redis cluster nodes - Add new cluster policies for different caching strategies - Implement cluster-specific Redis function caches
1 parent 5ef5606 commit 5a79e49

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

.ruff.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
src = ["src"]
1+
src = ["src", "tests"]
22
extend-exclude = ["docs"]
33
line-length = 120
44

tests/_catches.py

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import asyncio
22
import atexit
33
from os import getenv
4-
from typing import Optional
4+
from typing import Callable, Dict, List, Optional
55
from warnings import warn
66

77
from redis import Redis
88
from redis.asyncio import Redis as AsyncRedis
9+
from redis.cluster import ClusterNode, RedisCluster
910

1011
from redis_func_cache import (
1112
FifoClusterMultiplePolicy,
@@ -22,11 +23,11 @@
2223
RrClusterMultiplePolicy,
2324
RrPolicy,
2425
)
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
3031

3132
try:
3233
from dotenv import load_dotenv
@@ -69,6 +70,35 @@ async def close_async_redis_client():
6970
ASYNC_REDIS_FACTORY = lambda: AsyncRedis.from_url(REDIS_URL) # noqa: E731
7071
REDIS_CLUSTER_NODES = getenv("REDIS_CLUSTER_NODES")
7172

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+
72102

73103
CACHES = {
74104
"tlru": RedisFuncCache(__name__, LruTPolicy, client=REDIS_FACTORY, maxsize=MAXSIZE),

0 commit comments

Comments
 (0)