Skip to content

Commit 82b629d

Browse files
committed
feat: support multi-architecture Redis service
1 parent f3d015e commit 82b629d

File tree

6 files changed

+95
-33
lines changed

6 files changed

+95
-33
lines changed

core/llm_token_ratelimit/redis_client.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525

2626
type SafeRedisClient struct {
2727
mu sync.RWMutex
28-
client *redis.ClusterClient
28+
client redis.UniversalClient
2929
}
3030

3131
var globalRedisClient = NewGlobalRedisClient()
@@ -34,7 +34,7 @@ func NewGlobalRedisClient() *SafeRedisClient {
3434
return &SafeRedisClient{}
3535
}
3636

37-
func (c *SafeRedisClient) SetRedisClient(client *redis.ClusterClient) error {
37+
func (c *SafeRedisClient) SetRedisClient(client redis.UniversalClient) error {
3838
if c == nil {
3939
return fmt.Errorf("safe redis client is nil")
4040
}
@@ -82,8 +82,8 @@ func (c *SafeRedisClient) Init(cfg *Redis) error {
8282
minIdleConns := cfg.MinIdleConns
8383
maxRetries := cfg.MaxRetries
8484

85-
newClient := redis.NewClusterClient(
86-
&redis.ClusterOptions{
85+
newClient := redis.NewUniversalClient(
86+
&redis.UniversalOptions{
8787
Addrs: addrs,
8888

8989
Username: cfg.Username,
@@ -100,10 +100,6 @@ func (c *SafeRedisClient) Init(cfg *Redis) error {
100100
},
101101
)
102102

103-
if newClient == nil {
104-
return fmt.Errorf("new redis client is nil")
105-
}
106-
107103
if _, err := newClient.Ping(context.TODO()).Result(); err != nil {
108104
return fmt.Errorf("failed to connect to redis cluster: %v", err)
109105
}
Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,48 @@
11
#!/bin/zsh
22

3+
supported_modes=("single" "cluster")
4+
5+
mode=$1
6+
if [[ ! " ${supported_modes[@]} " =~ " ${mode} " ]]; then
7+
echo "Usage: $0 [single|cluster]"
8+
exit 1
9+
fi
10+
11+
if [[ ! -e "docker-compose-$mode.yml" ]]; then
12+
echo "docker-compose-$mode.yml not found!"
13+
exit 1
14+
fi
15+
316
echo "Building application..."
417
./build-code.sh
518

619
echo "Building and starting containers..."
7-
docker-compose -f docker-compose.yml down
8-
docker-compose -f docker-compose.yml up --build -d
20+
docker-compose -f docker-compose-$mode.yml down
21+
docker-compose -f docker-compose-$mode.yml up --build -d
922

1023
echo "Waiting for Redis nodes to start..."
1124
sleep 10
1225

13-
echo "Checking Redis nodes status..."
14-
for port in 7001 7002 7003; do
15-
echo "Checking Redis on port $port..."
16-
timeout 5 redis-cli -h 127.0.0.1 -p $port ping || echo "Redis on port $port not ready"
17-
done
18-
19-
echo "Initializing Redis cluster..."
20-
# 使用容器内部执行集群初始化
21-
docker exec redis-node-1 redis-cli --cluster create \
22-
172.20.0.11:6379 \
23-
172.20.0.12:6379 \
24-
172.20.0.13:6379 \
25-
--cluster-replicas 0 \
26-
--cluster-yes
27-
28-
echo "Checking cluster status..."
29-
docker exec redis-node-1 redis-cli cluster nodes
30-
31-
echo "Cluster setup complete!"
26+
if [ "$mode" = "cluster" ]; then
27+
echo "Checking Redis nodes status..."
28+
for port in 7001 7002 7003; do
29+
echo "Checking Redis on port $port..."
30+
timeout 5 redis-cli -h 127.0.0.1 -p $port ping || echo "Redis on port $port not ready"
31+
done
32+
33+
echo "Initializing Redis cluster..."
34+
# 使用容器内部执行集群初始化
35+
docker exec redis-node-1 redis-cli --cluster create \
36+
172.20.0.11:6379 \
37+
172.20.0.12:6379 \
38+
172.20.0.13:6379 \
39+
--cluster-replicas 0 \
40+
--cluster-yes
41+
42+
echo "Checking cluster status..."
43+
docker exec redis-node-1 redis-cli cluster nodes
44+
else
45+
echo "Single node mode, no cluster initialization needed."
46+
fi
47+
48+
echo "Containers setup complete!"

tests/benchmark/llm_token_ratelimit/docker-compose.yml renamed to tests/benchmark/llm_token_ratelimit/docker-compose-cluster.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
services:
2-
# Redis 6.0 集群(三主三从)
2+
# Redis 6.0 集群
33
redis-node-1:
44
image: redis:6.2.7
55
container_name: redis-node-1
66
ports:
77
- "7001:6379"
88
- "17001:16379"
99
volumes:
10-
- ./redis.conf:/usr/local/etc/redis/redis.conf
10+
- ./redis-cluster.conf:/usr/local/etc/redis/redis.conf
1111
command: redis-server /usr/local/etc/redis/redis.conf
1212
networks:
1313
test-network:
@@ -20,7 +20,7 @@ services:
2020
- "7002:6379"
2121
- "17002:16379"
2222
volumes:
23-
- ./redis.conf:/usr/local/etc/redis/redis.conf
23+
- ./redis-cluster.conf:/usr/local/etc/redis/redis.conf
2424
command: redis-server /usr/local/etc/redis/redis.conf
2525
networks:
2626
test-network:
@@ -33,7 +33,7 @@ services:
3333
- "7003:6379"
3434
- "17003:16379"
3535
volumes:
36-
- ./redis.conf:/usr/local/etc/redis/redis.conf
36+
- ./redis-cluster.conf:/usr/local/etc/redis/redis.conf
3737
command: redis-server /usr/local/etc/redis/redis.conf
3838
networks:
3939
test-network:
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
services:
2+
# Redis 6.0 单节点
3+
redis-node-1:
4+
image: redis:6.2.7
5+
container_name: redis-node-1
6+
ports:
7+
- "7001:6379"
8+
volumes:
9+
- ./redis-single.conf:/usr/local/etc/redis/redis.conf
10+
command: redis-server /usr/local/etc/redis/redis.conf
11+
networks:
12+
- test-network
13+
14+
# Sentinel Go LLM Token RateLimit 服务容器
15+
sentinel-go-llm-token-ratelimit:
16+
build:
17+
context: .
18+
dockerfile: Dockerfile
19+
container_name: sentinel-go-llm-token-ratelimit
20+
command: ["tail", "-f", "/dev/null"]
21+
ports:
22+
- "9527:9527"
23+
volumes:
24+
- ./out:/workspace
25+
networks:
26+
- test-network
27+
depends_on:
28+
- redis-node-1
29+
environment:
30+
- LLM_API_KEY=${LLM_API_KEY}
31+
- LLM_BASE_URL=${LLM_BASE_URL}
32+
- LLM_MODEL=${LLM_MODEL}
33+
deploy:
34+
resources:
35+
limits:
36+
cpus: '2'
37+
memory: 4G
38+
restart: on-failure
39+
40+
# 定义网络和卷
41+
networks:
42+
test-network:
43+
driver: bridge
File renamed without changes.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
port 6379
2+
bind 0.0.0.0
3+
protected-mode no
4+
daemonize no
5+
appendonly yes
6+
cluster-enabled no

0 commit comments

Comments
 (0)