Redis中的代理Sharding
典型的代理分区方案有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相关推荐
- Redis中的客户端Sharding
Jedis 客户端提供了Redis Sharding 的方案,并且支持连接池. ShardedJedis public class ShardingTest {public static void m ...
- Redis集群:sharding策略
为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在 ...
- Redis中AKF原则的应用
Redis 单机 .单节点.单实例 缺点:1. 单点故障(一台服务如果挂了,整个系统不可用了)2. 容量有限3. 压力 过大 为了解决 单机的 问题 ,引入了AKF 原则 AKF X轴:直接水平复制应 ...
- 利用nginx+lua+redis实现反向代理方法教程
这篇文章主要给大家介绍了利用nginx+lua+redis实现反向代理方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近因为工作需要,要进行IVR的 ...
- 六、redis中AKF问题解决方案
导读 前面文章[一.深入理解redis之需要掌握的知识点 ]中,我们对redis需要学习的内容框架进行了一个梳理. [二.redis中String和List两种数据类型和应用场景 ].[二.redis ...
- 浅析Nginx中各种锁实现丨Nginx中手写一个线程池丨Nginx中反向代理,正向代理,负载均衡,静态web服务丨C++后端开发
学会nginx中锁的使用,让你对锁豁然开朗 1. 反向代理,正向代理,负载均衡,静态web服务 2. nginx 中 accept 锁实现 自旋锁 信号量 3. nginx 中 线程池 实现以及详解虚 ...
- Redis中的HotKey如何解决
对于三高系统,Redis是必须/必需的,当并发高到一定的程度就可能会出现HotKey的问题,今天我们来看下Redis中的HotKey如何解决. 什么是HotKey 在较短的时间内,海量请求访问一个Ke ...
- 函数指针--Nginx和Redis中两种回调函数写法
1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...
- Redis初学:14(Redis中的事务)
Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...
最新文章
- 【caffe】使用自己的图像数据训练lenet并用opencv进行预测
- js中写java集合代码,JS实现JAVA的List功能
- ThinkPHP函数详解:C方法
- 微信开发基础 获取用户OpenID 列表
- arduino(2560)与步进电机驱动器连线
- 【爬虫实战】 58同城爬虫-商铺信息采集
- 项目开发设计文档怎么写,范文。
- devops学习(三) K8环境部署jenkins
- 完整代码-Vue+Java后台实现省市区三级联动
- 封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度
- idea 流程图出现 Condition \n
- 将文件放到Android模拟器的SD卡中的两种解决方法
- 2021年「博客之星」参赛博主:dnbug Blog
- Gitment给基于hexo的yilia主题的博客搭建免费评论系统
- 学计算机的演员,南开大学计算机系到演员 张桐回顾“不安分”的青春_TOM明星...
- seaJS 简要介绍和完整例子
- 看涨期权和看跌期权的图解
- 树莓派csi摄像头安装过程
- python海龟怎么隐藏_Turtle库学习--海龟可见性与外观
- 论文精读:DenseNet:Densely Connected Convolutional Networks
热门文章
- PL/SQL程序设计(一)—— PL/SQL程序设计简介
- Android studio 报错AAPT2 error
- Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数
- Centos 7安装与配置chef
- Everything(速度快的文件搜索软件) 1.4.1.801b 汉化绿色版
- ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
- C# StatusStrip状态栏 例程
- [转]Joomla! 1.5中form表单的实现方式
- 更改整个目录文件的所有权限
- 手机浏览器无法获取COOKIE的原因