【Redis 集群二】
集群的客户端
Redis 集群现阶段的一个问题是客户端实现很少。 以下是一些我知道的实现:
redis-rb-cluster
是我(@antirez)编写的 Ruby 实现, 用于作为其他实现的参考。 该实现是对redis-rb
的一个简单包装, 高效地实现了与集群进行通讯所需的最少语义(semantic)。redis-py-cluster
看上去是redis-rb-cluster
的一个 Python 版本, 这个项目有一段时间没有更新了(最后一次提交是在六个月之前), 不过可以将这个项目用作学习集群的起点。- 流行的 Predis 曾经对早期的 Redis 集群有过一定的支持, 但我不确定它对集群的支持是否完整, 也不清楚它是否和最新版本的 Redis 集群兼容 (因为新版的 Redis 集群将槽的数量从 4k 改为 16k 了)。
- Redis
unstable
分支中的redis-cli
程序实现了非常基本的集群支持, 可以使用命令redis-cli -c
来启动。
测试 Redis 集群比较简单的办法就是使用 redis-rb-cluster
或者 redis-cli
, 接下来我们将使用 redis-cli
为例来进行演示:
redis-cli
对集群的支持是非常基本的, 所以它总是依靠 Redis 集群节点来将它转向(redirect)至正确的节点。
一个真正的(serious)集群客户端应该做得比这更好: 它应该用缓存记录起哈希槽与节点地址之间的映射(map), 从而直接将命令发送到正确的节点上面。
这种映射只会在集群的配置出现某些修改时变化, 比如说, 在一次故障转移(failover)之后, 或者系统管理员通过添加节点或移除节点来修改了集群的布局(layout)之后, 诸如此类。