博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis集群学习笔记
阅读量:5925 次
发布时间:2019-06-19

本文共 1725 字,大约阅读时间需要 5 分钟。

Redis集群学习笔记

前言

最近有个需求,就是将一个Redis集群中数据转移到某个单机Redis上。

迁移Redis数据的话,如果是单机Redis,有两种方式:

a. 执行redis-cli shutdown命令,触发写RDBAOF写磁盘操作,然后将RDB文件和AOF文件都拷贝到新服务器上,然后运行服务器即可。
b. 如果不想暂停服务,可以用工具,比如Redis Dump;也可以采用Redis提供的Master Slave方式同步数据。

但是,如果是Redis集群的话,每个Redis实例上面只有部份数据,这就不太好办了。因此,有必要学习Redis集群的相关知识。

基础知识 - 分片

为什么Redis需要分片?Redis分片可以

  1. 分片后,数据库容量不受单机内存容量限制
  2. 分片能利用多核、多服务器,提高计算能力(一个Redis服务是单线程的)
  3. 分片后,单机网络带宽压力减少。

为什么选择哈希分片(hash partitioning)?

最简单的分片方式是范围分片,不过范围分片要维护一个映射范围到实例的表,这种方式效率低。

 例如:如果我们的数据是user的形式,我们可以把user<0>到user<1000>的数据存到1号Redis实例,把user<10001>到user<20000>存到2号Redis实例,依此类推。但如果我们还有post, , 等各种不同类型的键,我们需要为每一种类型定义一个映射范围表。这个比较麻烦。

采用哈希分片就没有这个问题。由于Redis自身是一个Key-Value数据库,可以直接对key这个字符串计算hash,得到一个数字,然后对数字取模(模为redis实例数目)。

例如:我们对user<2019>这个键计算哈希得到数字9527520,假设我们有7个Redis实例,9527520 % 7 = 2,我们就能知道这个数据存放在2号Redis实例中。

分片的不同实现

  • 客户端分片(Client side partitioning)意味着,客户端直接选择正确的节点来写入和读取指定键。许多 Redis 客户端实现了客户端分片。
  • 代理协助分片(Proxy assisted partitioning)意味着,我们的客户端发送请求到一个可以理解 Redis 协议的代理上,而不是直接发送请求到 Redis 实例上。代理会根据配置好的分片模式,来保证转发我们的请求到正确的 Redis 实例,并返回响应给客户端。Redis 和 Memcached 的代理 Twemproxy 实现了代理协助的分片。
  • 查询路由(Query routing)意味着,你可以发送你的查询到一个随机实例,这个实例会保证转发你的查询到正确的节点。Redis 集群在客户端的帮助下,实现了查询路由的一种混合形式 (请求不是直接从 Redis 实例转发到另一个,而是客户端收到重定向到正确的节点)。下面所说的Redis Cluster就是采用查询路由的方式。

Redis官方提供的集群实现:Redis Cluster

从 Redis 3.0 开始,Redis提供了一个官方集群实现:Redis Cluster。

上面这两个文档足够了,下面是我的一些理解。

新增或删除结点

RedisCluster通过哈希槽移动、哈希槽百分比调整、重新分片(Reshard)等操作完成增删结点、数据均衡。

这篇博客挺好的,自己动手试试试试能加深理解,

Redis Cluset的主从模型Master-Slave

比如我们有6个Redis实例,可以用分别设置A,B,C三台作为Redis Cluster的主服务器,然后设置A1,A2,A3作为从服务器。这样,当主服务器A宕机后,Redis Cluster会自动将请求重定向到A1服务器。

一定要看的链接

  • PS:感觉这个教程写的特别棒。   
  • 下面是翻译,一定要看:
  • 阅读这个,你可以知道:
    • 了解一下客户端分片、代理分片以及Redis集群的应用
    • 了解为什么知乎不采用Redis官方提供的Redis Cluster实现?

转载于:https://www.cnblogs.com/fondoger/p/10684336.html

你可能感兴趣的文章
企业应用开发中最常用c++库
查看>>
mongodb学习笔记之索引(转)
查看>>
外观模式(Facade)
查看>>
python第三方库requests详解
查看>>
ARC下带CF前缀的类型与OC类型转换
查看>>
CSS控制文本超出指定宽度显示省略号和文本不换行效果的实现
查看>>
【转】Zookeeper 安装和配置
查看>>
《剑指offer》-连续子数组的最大和
查看>>
Docker入门系列8
查看>>
CF 291E. Tree-String Problem [dfs kmp trie图优化]
查看>>
json转字符串 —— jsonObj.toJSONString()与JSON.stringify(jsonObj)
查看>>
mysql linux下表名忽略大小写注意事项
查看>>
springmvc的声明式事务管理类型讲解
查看>>
Unable to cast object of type 'System.Int32' to type 'System.Array'.
查看>>
Linux下双网卡绑定bond0【转】
查看>>
Mybatis(一) mybatis入门
查看>>
EM 算法 实例
查看>>
深入理解javascript闭包【整理】
查看>>
Color Schema 配色随笔
查看>>
spring-cloud: eureka之:ribbon负载均衡配置(一)
查看>>