Redis-集群 - 分片
- 完全基于内存
- 数据结构简单,对数据操作也简单
- 使用多路 I/O 复用模型
- 代码更清晰,处理逻辑更简单
- 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
- 不存在多进程或者多线程导致的切换而消耗CPU
- 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;
理论讲完,就来点干活
最近公司打算做redis集群分片,研究了下redis 自带的clutesr 功能真的很强大,唯一的不足之处就是当其中一个分片服务器挂掉的话整个集群就会宕机,处于系统不可用状态
官网分片方案,很不错但是要保证数据备份,做redis 灾备方案,会比较麻烦,而且需要很多台服务器,redis搭建cluster分片服务起需要针对每台分片搭建主从配置方案,实现自动切换从而解决相关问题,相关主从的配置还有需要搭建redis sentinel哨兵服务,导致整个集群变得越来越复杂维护成本越来越高,所以为了解决这个问题,就打算通过客户端分片的方式实现该功能,减少运维压力
一致性哈希算法实现redis的数据分片横向扩展
翻阅资料发现java 有现成的jredis客户端分片方案,C#比较悲哀只能自己实现,其实jedis实现实现分片方式是通过一致性哈希算法实现的集群分片,装模做样照搬实现方式,备份通过两次哈希键值达到备份的目的
那么什么是一致性哈希算法呢?网上有很多资料,我讲讲自己的简单理解
redis 是键值对数据存储的一种数据库,我们在存出数据的时候要将数据均匀的分布在多个服务器上面,并且在增加减少cache server后,cache的迁移做到最少。
那么一致性hash算法就是为了实现这个功能设计的
具体算法代码参见
https://git.oschina.net/hl.wei/RedisCluster.git
一致性哈希算法可以实现数据散列到均衡的服务器,能够最大限度的达到增减服务器的时候数据散列问题影响至最小。
实际应用中减少服务器添加,删除,造成的数据丢失问题,可以使用如下方案:
假如我们有 A,B,C 三台服务器,我们在三台服务器上面每天搭建三个redis 实例,等于创建了 有9台redis 实例,当我们添加新机器的时候就可以直接映射一台服务器到 其中一个实例,对该服务器数据进行迁移达到数据零误差完美迁移的目的。
Redis-集群 - 分片的更多相关文章
- 【Redis学习之九】Redis集群:Twemproxy和HA
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-3.0.4 主从模式对写压力没有分担,解决思路就 ...
- Redis 集群缓存测试要点--关于 线上 token 失效 BUG 的总结
在测试账户系统过程中遇到了线上大面积用户登录态失效的严重问题,事后对于其原因及测试盲点做了一些总结记录以便以后查阅,总结分为以下7点,其中原理性的解释有些摘自网络. 1.账户系统token失效问题复盘 ...
- redis集群与分片(2)-Redis Cluster集群的搭建与实践
Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...
- redis集群与分片(1)-redis服务器集群、客户端分片
下面是来自知乎大神的一段说明,个人觉得非常清晰,就收藏了. 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型 ...
- redis(6)--redis集群之分片机制(redis-cluster)
Redis-Cluster 即使是使用哨兵,此时的Redis集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于可用存储内存最小的节点,形成了木桶效应.而因为Redis是基于内存 ...
- 在 Istio 中实现 Redis 集群的数据分片、读写分离和流量镜像
Redis 是一个高性能的 key-value 存储系统,被广泛用于微服务架构中.如果我们想要使用 Redis 集群模式提供的高级特性,则需要对客户端代码进行改动,这带来了应用升级和维护的一些困难.利 ...
- Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义
回到目录 关于redis-sentinel出现的原因 Redis集群的主从模式有个最大的弊端,就是当主master挂了之前,它的slave从服务器无法提升为主,而在redis-sentinel出现之后 ...
- [个人翻译]Redis 集群教程(中)
上一篇:http://www.cnblogs.com/li-peng/p/6143709.html 官方原文地址:https://redis.io/topics/cluster-tutorial 水 ...
- [个人翻译]Redis 集群教程(上)
官方原文地址:https://redis.io/topics/cluster-tutorial 水平有限,如果您在阅读过程中发现有翻译的不合理的地方,请留言,我会尽快修改,谢谢. 这是 ...
- Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接
上文介绍了Redis Sharding集群的使用,点击阅读 本文介绍当某个Redis节点的Master节点发生问题,发生主从切换时,Jedis怎样自动重连新的Master节点 一.步骤如下: 1.配 ...
随机推荐
- 课堂限时训练-简易计算器·mini dc
课堂限时训练-简易计算器·mini dc 实验题目 采用后缀表达式法,设计一个建议计算器,实现+.-.*./四种运算. 代码实现 码云链接 关键代码部分及结果如下: 实验分析 首先,分析一下后缀表达式 ...
- 使用Nmap攻击靶机和使用Wireshark进行嗅探、分析
使用Nmap攻击靶机和使用Wireshark进行嗅探.分析 在上一次课中已经对Nmap的使用.原理已经做了很多学习,这次的课更多地针对Wireshark进行学习和使用. 使用192.168.200.1 ...
- OpenGL中常用的函数
OPengl的官方文档如下:https://www.opengl.org/sdk/docs/man4/ void glGetIntegerv( GLenum pname, GLint * ...
- MFC中的DLL、LIb文件的创建、使用
动态链接库Dynamic-Linked Lib 的创建与使用 动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软 ...
- 企业搜索引擎开发之连接器connector(十八)
创建并启动连接器实例之后,连接器就会基于Http协议向指定的数据接收服务器发送xmlfeed格式数据,我们可以通过配置http代理服务器抓取当前基于http协议格式的数据(或者也可以通过其他网络抓包工 ...
- Hibernate继承映射(@Inheritance)
继承映射在 Annotation 中使用 @Inheritance 注解,并且需要使用 strategy 属性指定继承策略,继承策略有 SINGLE_TABLE.TABLE_PER_CLASS 和 J ...
- Android 屏幕,语言,API版本 适配和兼容性
Supporting Different Languages http://developer.android.com/training/basics/supporting-devices/langu ...
- 【文文殿下】[51nod1469] 淋漓尽致子串
SAM的经典应用 一个状态的SIze==1绝对不合法. 一个状态在parent树上有一个Size>1的后继绝对不合法(前面可以再补字符) 一个状态可以转移到Size>1的节点绝对不合法,因 ...
- Python(re模块,正则)
day18 正则表达式用处? 匹配 字符串 s = 'hello world' print(s.find('llo'))#第一个的位置 ret = s.replace('ll','xx') print ...
- jquery源码解析:jQuery队列操作queue方法实现的原理
我们先来看一下jQuery中有关队列操作的方法集: 从上图可以看出,既有静态方法,又有实例方法.queue方法,相当于数组中的push操作.dequeue相当于数组的shift操作.举个例子: fun ...