Redis集群中KEYS *命令无法显示全部键的问题排查
Redis集群KEYS命令仅显示部分键的原因及解决办法
核心原因:Redis集群的分片特性
- Redis集群采用哈希槽分片机制,每个键会根据哈希值分配到不同的集群节点上。你用
redis-cli -c -h host.amazonaws.com -p 6379连接的是集群中的单个节点,KEYS *命令只会遍历当前连接节点上的键,不会跨节点查询所有分片的键,所以只能看到其中一个键。 GET命令在集群模式(-c参数启用)下,客户端会自动计算键对应的哈希槽,路由到存储该键的节点获取数据,因此无论键在哪个节点都能正常返回结果。info keyspace返回的db0:keys=11是整个集群的总键数,并非当前节点的键数量,这也佐证了键分布在多个节点上的事实。
解决办法
- 要查看集群所有节点的键,可使用集群批量执行命令:
该命令会在集群所有节点上执行redis-cli --cluster call host.amazonaws.com:6379 KEYS "*"KEYS *并汇总结果。 - 生产环境避免使用
KEYS *(会阻塞节点),推荐用SCAN命令结合集群批量执行:redis-cli --cluster call host.amazonaws.com:6379 SCAN 0 MATCH "*" COUNT 100
内容的提问来源于stack exchange,提问作者7msseven
相关产品推荐
相关产品推荐

