Codis 分布式 Redis 解决方案
最后更新于:2022-04-02 04:00:57
[TOC]
> [github.com](https://github.com/CodisLabs/codis)
## 概述
1. Codis 是一个分布式 Redis 解决方案,上层应用可以像使用单机的 Redis 一样使用
2. 对偏存储型的业务更实用, Codis 是**不支持**的SUBPUB. 时刻记住 Codis 是一个分布式存储的项目. 对于海量的 key, value不太大( <= 1M ), 随着业务扩展缓存也要随之扩展的业务场景有特效
### 提供的服务
**Codis Server**:基于 redis-3.2.8 分支开发。
**Codis Proxy**:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外([不支持的命令列表](https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported_cmds.md)),表现的和原生的 Redis 没有区别(就像 Twemproxy)。
1. 对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;
2. 不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
**Codis Dashboard**:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。所有对集群的修改都必须通过 codis-dashboard 完成。
**Codis Admin**:集群管理的命令行工具。
可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。
**Codis FE**:集群管理界面。
**Storage**:为集群状态提供外部存储。
提供 Namespace 概念,不同集群的会按照不同 product name 进行组织;
目前仅提供了 Zookeeper、Etcd、Fs 三种实现,但是提供了抽象的 interface 可自行扩展。
### 与Twemproxy和Redis集群比较
| | codis | Twemproxy | Redis集群 |
| --- | --- | --- | --- |
| 重新分片而不重新启动集群 | 是 | 没有 | 是 |
| 管道 | 是 | 是 | 没有 |
| 用于多键操作的哈希标签 | 是 | 是 | 是 |
| 重新分片时进行多键操作 | 是 | | 否([详细](http://redis.io/topics/cluster-spec#multiple-keys-operations)) |
| Redis客户支持 | **任何客户** | 任何客户 | 客户端必须支持集群协议 |
### 优点
1. 增减redis实例对client完全透明、不需要重启服务
2. Codis支持**水平扩容/缩容**,扩容可以直接界面的 "Auto Rebalance" 按钮,缩容只需要将要下线的实例拥有的slot迁移到其它实例,然后在界面上删除下线的group即可
## 安装
[官方教程](https://github.com/CodisLabs/codis/blob/release3.2/doc/tutorial_zh.md)
';