Redis 流量路由
采用 RedisService ,我们可以根据请求 key 的前缀将流量路由到不同的 Redis 服务上。
例如下面的 RedisService 将以 cluster
开头的 key 路由到 redis-cluster 服务,其它 key 路由到 redis-single 服务。
kubectl apply -f- <<EOF
apiVersion: redis.aeraki.io/v1alpha1
kind: RedisService
metadata:
name: redis-cluster
namespace: redis
spec:
host:
- redis-cluster.redis.svc.cluster.local
redis:
- match:
key:
prefix: cluster
route:
host: redis-cluster.redis.svc.cluster.local
- route:
host: redis-single.redis.svc.cluster.local
EOF
此时通过客户端访问 redis-cluster 服务,分别设置 test-route
和 cluster-test-route
两个 key 的值。然后这两个 key 的值也可以通过 get 命令获取到。
kubectl exec -it `kubectl get pod -l app=redis-client -n redis -o jsonpath="{.items[0].metadata.name}"` -c redis-client -n redis -- redis-cli -h redis-cluster
redis-cluster:6379> set test-route "this key goes to redis-single"
OK
redis-cluster:6379> set cluster-test-route "this key goes to redis-cluster"
OK
redis-cluster:6379> get test-route
"this key goes to redis-single"
redis-cluster:6379> get cluster-test-route
"this key goes to redis-cluster
再通过客户端访问 redis-single 服务,可以看到 redis-single 服务中只有 test-route
这个 key,而 cluster-test-route
这个 key 的值为 nil。这说明 test-route
被路由到 redis-single 服务,而 cluster-test-route
被路由到 redis-cluster 服务。
kubectl exec -it `kubectl get pod -l app=redis-client -n redis -o jsonpath="{.items[0].metadata.name}"` -c redis-client -n redis -- redis-cli -h redis-single
redis-single:6379> AUTH testredis123!
OK
redis-single:6379> get test-route
"this key goes to redis-single"
redis-single:6379> get cluster-test-route
(nil)
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 May 6, 2023: Redis traffic management (0655496)