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.配 ...
随机推荐
- Oracle E-Business Suite并发请求的优先级(Concurrent Request Priority)
不少用户抱怨自己的Oracle E-Business Suite并发请求(Concurrent Request)提交了好久,但还是一直在排队,等了好久还没有执行.用户希望对于一些重要性程度高.响应要求 ...
- OA与ERP集成 可行?
[正文] 近些年来,当谈论到企业信息化的时候,ERP都成为一个热门话题,ERP的出现似乎给企业带来了一个翻天覆地的变化,而且也成为企业实现信息化的"新宠儿".然而OA也曾经是企业信 ...
- struct timeval 计时问题
linux编程中,如果用到计时,可以用struct timeval获取系统时间.struct timeval的函数原型如下: struct timeval { __kernel_time_t tv_s ...
- 如何在powerdesign15.1中使用自增列
点击要设置为自增列的列 右键选择properties(或者按下ALT+enter) 点选红框,再点击Microsoft选项卡, 输入开始值和自增值即可 来自为知笔记(Wiz)
- 一次HTTP通信过程
当我们在浏览器地址栏输入一个网址然后回车以后就看到了一个对应网址的网页,那这个过程到底是怎样的?都发生了什么? 大致是这几个步骤 服务器的应答部分是包含应答状态码:比较常见的是 200:ok 403: ...
- 在Excel中导入文本文件(CSV/TXT),自定义隔离符号
经常需要在Excel中导入文本文件,但是需要自定义隔离符号,例如空格或者逗号,参考一下方法:
- Javascript设计模式理论与实战:工厂方法模式
本文从简单工厂模式的缺点说起,引入工厂方法模式,介绍的工厂方法模式的基本知识,实现要点和应用场景,最后举例进行说明工厂方法模式的应用.在之前的<Javascript设计模式理论与实战:简单工厂模 ...
- linux中执行java或者mvn命令提示没有权限解决办法
$ chmod a+x /var/jenkins_home/jdk1.8.0_191/bin/java $ chmod a+x /var/jenkins_home/apache-maven-3.3.9 ...
- PostgreSQL创建表及约束
创建表 语法: create table table_name ( column_name type column_constraint, table_constraint table_constra ...
- .Net Core下使用Ajax,并传送参数到controllers
可以使用URL拼接方式方法传参 .cshtml部分 @section Scripts{ @{ await Html.RenderPartialAsync("_ValidationScript ...