[关闭]
@yibo 2016-04-22T03:35:25.000000Z 字数 1353 阅读 979

Codis

Jiemo Redis Codis 集群


Codis 简介

Codis由豌豆荚于2014年11月开源,基于Go和C开发。
https://github.com/CodisLabs/codis

Redis 常见集群技术

  1. 客户端分片
  2. 代理分片
  3. Redis Cluster

目前咱们 Redis 集群使用的应该算是客户端分片,主要问题是升级麻烦,Redis 实例的增减,都得手工调整分片程序。

代理分片的主要代表就是 Twemproxy (Twitter 开源)和 Codis。

Codis 与 Twemproxy 和 Redis Cluster 三者的比较(摘自 Codis Github):

CodisTwemproxyRedis Cluster
resharding without restarting clusterYesNoYes
pipelineYesYesNo
hash tags for multi-key operationsYesYesYes
multi-key operations while reshardingYes-No
Redis clients supportingAny clientsAny clientsClients have to support cluster protocol

Benchmark:https://github.com/CodisLabs/codis/blob/master/doc/benchmark.md

Codis 体系架构

Architecture

安装

官网文档写的还挺详细的:
https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md

部署情况

注意

  1. codis 一些功能是他们自己改了 redis 源码的(看下边),所以需要用他们提供的 codis-server 来启动 redis 实例(因为添加官方的 redis 实例也不会报错,所以要注意了),配置文件和启动方式都是一模一样的。
    codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.21 开发, 加入了 slot 的支持和原子的数据迁移指令. Codis 上层的 codis-proxy 和 codis-config 只能和这个版本的 Redis 交互才能正常运行.
  2. dashboard 页面上,除了 Server Groups 栏目下的按钮,其他的按钮最好不要点击,有些 form 是没有做验证的。
  3. Codis 有些命令是不支持的,比如咱们 EventConsumer 用到的 BRPOP 等(目前在咱们项目中正在使用的有 BRPOP、KEYS, 以及海柱可能即将用到 Pub/Sub 相关的),所以咱们是得和原生的 Redis 结合来使用的。更多不支持命令列表请看 https://github.com/CodisLabs/codis/blob/master/doc/unsupported_cmds.md
  4. 在代码的 default 分支中我已经引入了 codis 相关的依赖,封装了一个 Jodis 类以供使用(仅仅做了测试,还没在代码中使用),
  1. Jodis.INSTANCE.getJedis().get("foo"); //bar

另外 jiemo-component 中 io.codis.jodis.RoundRobinJedisPool 类是为了覆盖原有依赖中对应的类的(原有的要依赖 Jedis 的 2.8.0 版本),勿删。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注