Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型。所以得到很多开发者的青睐。加之其支持主从、持久化等功能,3.0版本开始正式提供分片技术、让其在大型互联网应用中大显身手
 
分片(parttitioning)就是将你的数据拆分到多个redis实例的过程,这样每个实例只包含所有键的子集,
 
分片的目的:
1、允许使用很多电脑内存综合来支持更大的数据库,没有分片你就被局限于单机能支持的内存容量
2、允许伸缩计算到多核和多服务器,伸缩网络带宽到多服务器或者多网络适配器
 
拓展
Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps。这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached差。
Redis快的主要原因是:
  1. 完全基于内存
  2. 数据结构简单,对数据操作也简单
  3. 使用多路 I/O 复用模型
单进程单线程好处
  1. 代码更清晰,处理逻辑更简单
  2. 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
  3. 不存在多进程或者多线程导致的切换而消耗CPU
单进程单线程弊端
  1. 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;
 
分片的基础
1、范围分片
2、哈希分片
 
分片的不同实现
1、客户端分片:客户端直接选择正确的节点来写入和读取指定键,许多Redis客户端实现了客户端的分析
2、代理协助分片:客户端发送一个请求到一个可以理解Redis协议的代理上,而不是直接发送请求到
Redis实例上,代理会根据配置好的分片模式,来保证转发我们的请求到正确的Redis实例,并返回给客户端,Redis和Memcached的代理Twemproxy实现了代理协助分片
3、查询路由分片:你可以发送你的查询到一个随机实例,这个实例会保证转发你的查询到正确的节点,Redis集群在客户端的帮助下,实现了查询路由的一种混合形式(请求不是直接从Redis实例转发到另一个,而是客户端收到重定向到正确的节点)。
4、在服务端进行分片即Redis官方集群分片方案 Redis Cluster
 

理论讲完,就来点干活

最近公司打算做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-集群 - 分片的更多相关文章

  1. 【Redis学习之九】Redis集群:Twemproxy和HA

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-3.0.4 主从模式对写压力没有分担,解决思路就 ...

  2. Redis 集群缓存测试要点--关于 线上 token 失效 BUG 的总结

    在测试账户系统过程中遇到了线上大面积用户登录态失效的严重问题,事后对于其原因及测试盲点做了一些总结记录以便以后查阅,总结分为以下7点,其中原理性的解释有些摘自网络. 1.账户系统token失效问题复盘 ...

  3. redis集群与分片(2)-Redis Cluster集群的搭建与实践

    Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...

  4. redis集群与分片(1)-redis服务器集群、客户端分片

    下面是来自知乎大神的一段说明,个人觉得非常清晰,就收藏了. 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型 ...

  5. redis(6)--redis集群之分片机制(redis-cluster)

    Redis-Cluster 即使是使用哨兵,此时的Redis集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于可用存储内存最小的节点,形成了木桶效应.而因为Redis是基于内存 ...

  6. 在 Istio 中实现 Redis 集群的数据分片、读写分离和流量镜像

    Redis 是一个高性能的 key-value 存储系统,被广泛用于微服务架构中.如果我们想要使用 Redis 集群模式提供的高级特性,则需要对客户端代码进行改动,这带来了应用升级和维护的一些困难.利 ...

  7. Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义

    回到目录 关于redis-sentinel出现的原因 Redis集群的主从模式有个最大的弊端,就是当主master挂了之前,它的slave从服务器无法提升为主,而在redis-sentinel出现之后 ...

  8. [个人翻译]Redis 集群教程(中)

    上一篇:http://www.cnblogs.com/li-peng/p/6143709.html 官方原文地址:https://redis.io/topics/cluster-tutorial  水 ...

  9. [个人翻译]Redis 集群教程(上)

    官方原文地址:https://redis.io/topics/cluster-tutorial  水平有限,如果您在阅读过程中发现有翻译的不合理的地方,请留言,我会尽快修改,谢谢.        这是 ...

  10. Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接

    上文介绍了Redis Sharding集群的使用,点击阅读 本文介绍当某个Redis节点的Master节点发生问题,发生主从切换时,Jedis怎样自动重连新的Master节点 ​一.步骤如下: 1.配 ...

随机推荐

  1. Oracle E-Business Suite并发请求的优先级(Concurrent Request Priority)

    不少用户抱怨自己的Oracle E-Business Suite并发请求(Concurrent Request)提交了好久,但还是一直在排队,等了好久还没有执行.用户希望对于一些重要性程度高.响应要求 ...

  2. OA与ERP集成 可行?

    [正文] 近些年来,当谈论到企业信息化的时候,ERP都成为一个热门话题,ERP的出现似乎给企业带来了一个翻天覆地的变化,而且也成为企业实现信息化的"新宠儿".然而OA也曾经是企业信 ...

  3. struct timeval 计时问题

    linux编程中,如果用到计时,可以用struct timeval获取系统时间.struct timeval的函数原型如下: struct timeval { __kernel_time_t tv_s ...

  4. 如何在powerdesign15.1中使用自增列

    点击要设置为自增列的列 右键选择properties(或者按下ALT+enter) 点选红框,再点击Microsoft选项卡, 输入开始值和自增值即可 来自为知笔记(Wiz)

  5. 一次HTTP通信过程

    当我们在浏览器地址栏输入一个网址然后回车以后就看到了一个对应网址的网页,那这个过程到底是怎样的?都发生了什么? 大致是这几个步骤 服务器的应答部分是包含应答状态码:比较常见的是 200:ok 403: ...

  6. 在Excel中导入文本文件(CSV/TXT),自定义隔离符号

    经常需要在Excel中导入文本文件,但是需要自定义隔离符号,例如空格或者逗号,参考一下方法:

  7. Javascript设计模式理论与实战:工厂方法模式

    本文从简单工厂模式的缺点说起,引入工厂方法模式,介绍的工厂方法模式的基本知识,实现要点和应用场景,最后举例进行说明工厂方法模式的应用.在之前的<Javascript设计模式理论与实战:简单工厂模 ...

  8. 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 ...

  9. PostgreSQL创建表及约束

    创建表 语法: create table table_name ( column_name type column_constraint, table_constraint table_constra ...

  10. .Net Core下使用Ajax,并传送参数到controllers

    可以使用URL拼接方式方法传参 .cshtml部分 @section Scripts{ @{ await Html.RenderPartialAsync("_ValidationScript ...