Codis简介

Codis是一个分布式Redis解决方案,对于上层的应用来说,连接到CodisProxy和连接原生的RedisServer没有明显的区别(不支持的命令列表),上层应用可以像使用单机的Redis一样使用,Codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的Redis服务。

Github: https://github.com/CodisLabs/codis

特性:

  • 自动平衡

  • 使用非常简单

  • 图形化的面板和管理工具

  • 支持绝大多数 Redis 命令,完全兼容 twemproxy

  • 支持 Redis 原生客户端

  • 安全而且透明的数据移植,可根据需要轻松添加和删除节点

  • 提供命令行接口

  • RESTful APIs

Codis架构

Codis由四部分组成。

  • CodisProxy(codis-proxy)

codis-proxy是客户端连接的Redis代理服务,codis-proxy本身实现了Redis协议,表现得和一个原生的Redis没什么区别(就像Twemproxy),对于一个业务来说,可以部署多个codis-proxy,codis-proxy本身是无状态的。

  • CodisManager(codis-config)

codis-config是Codis的管理工具,支持包括,添加/删除Redis节点,添加/删除Proxy节点,发起数据迁移等操作.codis-config本身还自带了一个httpserver,会启动一个dashboard,用户可以直接在浏览器上观察Codis集群的运行状态。

  • CodisRedis(codis-server)

codis-server是Codis项目维护的一个Redis分支,基于2.8.13开发,加入了slot的支持和原子的数据迁移指令.Codis上层的codis-proxy和codis-config只能和这个版本的Redis交互才能正常运行。

  • ZooKeeper

Codis依赖ZooKeeper来存放数据路由表和codis-proxy节点的元信息,codis-config发起的命令都会通过ZooKeeper同步到各个存活的codis-proxy。

Codis支持按照Namespace区分不同的产品,拥有不同的productname的产品,各项配置都不会冲突。

目前Codis已经是稳定阶段,豌豆荚及大部分企业已经在使用该解决方案。

整体架构图:

对比Twemproxy, Redis Cluster

Function Codis Twemproxy Redis Cluster
rowresharding without restarting cluster Yes No Yes
rowreshardingpipeline Yes Yes No
hash tags for multi-key operations Yes Yes Yes
multi-key operations while resharding Yes - No(details)
Redis clients supporting Any clients Any clients Clients have to support cluster protocol

部分截图

Proxy:

Slots:

Group:

Sentinel:

推荐阅读

面经:史上最全Java多线程面试题及答案

面经:史上最全阿里高级Java面试题

面经:史上最全Spring面试题

教程:最全Spring Boot全套视频教程

书籍:进阶Java架构师必看的15本书

工具:推荐一款在线创作流程图、思维导图软件

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。

最新文章

  1. C算法编程题(二)正螺旋
  2. 前端XSS攻击和防御
  3. CSS3自动添加省略号
  4. Spring Bean配置
  5. JAVA中的NIO(一)
  6. 【M14】明智运用异常规范
  7. paip. mysql如何临时 暂时 禁用 关闭 触发器
  8. CSS3实现兼容性的渐变背景效果
  9. Twenty Newsgroups Classification任务之二seq2sparse(5)
  10. 使用JS的FormData对象
  11. 初识Javascript.03 -- switch、自增、while循环、for、break、continue、数组、遍历数组、合并数组concat
  12. JavaScript的8行代码搞定js文件引入问题
  13. 网站开发进阶(二十五)js如何将html表格导出为excel文件
  14. python smtplib发email
  15. 20175208 《Java程序设计》第七周学习总结
  16. PMP:9.项目资源管理
  17. 通信——基于Xmpp协议实现的聊天室
  18. systemctl添加开机启动
  19. 重读《深入理解Java虚拟机》四、虚拟机如何加载Class文件
  20. JPA原理与实践、多数据源配置

热门文章

  1. wordpress翻译插件gtranslate
  2. JUC 一 CountDownLatch(闭锁)
  3. thinkphp 动态配置
  4. BZOJ 3779: 重组病毒(线段树+lct+树剖)
  5. ES,kibana通过nginx添加访问权限
  6. Model Maker上手指南
  7. linux使用nmon监控、分析系统性能
  8. js实现图片资源、blob、base64的各种场景转换
  9. 2019-8-31-C#-字典-Dictionary-的-TryGetValue-与先判断-ContainsKey-然后-Get-的性能对比
  10. 【2-SAT】[JSOI2010]满汉全席