典型的代理分区方案有Twitter 开源的Twemproxy 和国内的豌豆荚开源的Codis。

Twemproxy

two-em-proxy

https://github.com/twitter/twemproxy

Twemproxy 的优点:比较稳定,可用性高。

不足:

1、出现故障不能自动转移,架构复杂,需要借助其他组件(LVS/HAProxy + Keepalived)实现HA

2、扩缩容需要修改配置,不能实现平滑地扩缩容(需要重新分布数据)。

Codis

https://github.com/CodisLabs/codis

Codis 是一个代理中间件,用Go 语言开发的。

功能:客户端连接Codis 跟连接Redis 没有区别。

  Codis Tewmproxy Redis Cluster
重新分片不需要重启 Yes No Yes
pipeline Yes Yes  
多key 操作的hash tags {} Yes Yes Yes
重新分片时的多key 操作 Yes - No
客户端支持 所有 所有 支持cluster 协议的客户

分片原理:Codis 把所有的key 分成了N 个槽(例如1024),每个槽对应一个分组,一个分组对应于一个或者一组Redis 实例。Codis 对key 进行CRC32 运算,得到一个32 位的数字,然后模以N(槽的个数),得到余数,这个就是key 对应的槽,槽后面就
是Redis 的实例。比如4 个槽:

Codis 的槽位映射关系是保存在Proxy 中的,如果要解决单点的问题,Codis 也要做集群部署,多个Codis 节点怎么同步槽和实例的关系呢?需要运行一个Zookeepe(r 或者etcd/本地文件)。

在新增节点的时候,可以为节点指定特定的槽位。Codis 也提供了自动均衡策略。

Codis 不支持事务,其他的一些命令也不支持。

不支持的命令

https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported_cmds.md

获取数据原理(mget):在Redis 中的各个实例里获取到符合的key,然后再汇总到Codis 中。

Codis 是第三方提供的分布式解决方案,在官方的集群功能稳定之前,Codis 也得到了大量的应用。

Redis中的代理Sharding相关推荐

  1. Redis中的客户端Sharding

    Jedis 客户端提供了Redis Sharding 的方案,并且支持连接池. ShardedJedis public class ShardingTest {public static void m ...

  2. Redis集群:sharding策略

    为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在 ...

  3. Redis中AKF原则的应用

    Redis 单机 .单节点.单实例 缺点:1. 单点故障(一台服务如果挂了,整个系统不可用了)2. 容量有限3. 压力 过大 为了解决 单机的 问题 ,引入了AKF 原则 AKF X轴:直接水平复制应 ...

  4. 利用nginx+lua+redis实现反向代理方法教程

    这篇文章主要给大家介绍了利用nginx+lua+redis实现反向代理方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近因为工作需要,要进行IVR的 ...

  5. 六、redis中AKF问题解决方案

    导读 前面文章[一.深入理解redis之需要掌握的知识点 ]中,我们对redis需要学习的内容框架进行了一个梳理. [二.redis中String和List两种数据类型和应用场景 ].[二.redis ...

  6. 浅析Nginx中各种锁实现丨Nginx中手写一个线程池丨Nginx中反向代理,正向代理,负载均衡,静态web服务丨C++后端开发

    学会nginx中锁的使用,让你对锁豁然开朗 1. 反向代理,正向代理,负载均衡,静态web服务 2. nginx 中 accept 锁实现 自旋锁 信号量 3. nginx 中 线程池 实现以及详解虚 ...

  7. Redis中的HotKey如何解决

    对于三高系统,Redis是必须/必需的,当并发高到一定的程度就可能会出现HotKey的问题,今天我们来看下Redis中的HotKey如何解决. 什么是HotKey 在较短的时间内,海量请求访问一个Ke ...

  8. 函数指针--Nginx和Redis中两种回调函数写法

    1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...

  9. Redis初学:14(Redis中的事务)

    Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...

最新文章

  1. 【caffe】使用自己的图像数据训练lenet并用opencv进行预测
  2. js中写java集合代码,JS实现JAVA的List功能
  3. ThinkPHP函数详解:C方法
  4. 微信开发基础 获取用户OpenID 列表
  5. arduino(2560)与步进电机驱动器连线
  6. 【爬虫实战】 58同城爬虫-商铺信息采集
  7. 项目开发设计文档怎么写,范文。
  8. devops学习(三) K8环境部署jenkins
  9. 完整代码-Vue+Java后台实现省市区三级联动
  10. 封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度
  11. idea 流程图出现 Condition \n
  12. 将文件放到Android模拟器的SD卡中的两种解决方法
  13. 2021年「博客之星」参赛博主:dnbug Blog
  14. Gitment给基于hexo的yilia主题的博客搭建免费评论系统
  15. 学计算机的演员,南开大学计算机系到演员 张桐回顾“不安分”的青春_TOM明星...
  16. seaJS 简要介绍和完整例子
  17. 看涨期权和看跌期权的图解
  18. 树莓派csi摄像头安装过程
  19. python海龟怎么隐藏_Turtle库学习--海龟可见性与外观
  20. 论文精读:DenseNet:Densely Connected Convolutional Networks

热门文章

  1. PL/SQL程序设计(一)—— PL/SQL程序设计简介
  2. Android studio 报错AAPT2 error
  3. Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数
  4. Centos 7安装与配置chef
  5. Everything(速度快的文件搜索软件) 1.4.1.801b 汉化绿色版
  6. ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
  7. C# StatusStrip状态栏 例程
  8. [转]Joomla! 1.5中form表单的实现方式
  9. 更改整个目录文件的所有权限
  10. 手机浏览器无法获取COOKIE的原因