Redis3 cluster 原理

Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便

Redis3 之前的集群问题

redis就像一个箱子,里面放着N个 {key,value} 信息

一个箱子肯定会有满的时候,就需要再加一个箱子,后续可能会加N个箱子 新建key时应该放入哪个箱子?

要取某个key时,怎么知道它在哪个箱子里呢? 这就需要定义一个规则来确定key的位置 例如使用hash值取模的方式

但这个计算操作需要我们自己来处理,比较麻烦 而且,有些情况也会更复杂,例如 添加、删除redis节点时如何处理?

Redis3 cluster 特点

(1)像操作单个redis一样操作key,不用操心key在哪个节点上 (2)在线动态添加、删除redis节点,不用停止服务 (3)根据节点性能,动态分配不同数量的key到不同redis节点

(4)每个节点都配有slave,并自动监测和切换

Redis3 cluster 核心思路

Redis3 cluster 中增加了一个重要概念:

hash slot(哈希槽),共有16384个slot key不是直接放入redis中了,而是放入slot中,再把slot放入redis中 可以理解为:

之前是把key直接放入箱子中,现在是先把一部分key放入一个小盒子,然后再把一堆小盒子放入一个箱子

根据keyhash值计算其所在的slot,再根据slot和redis节点的对应关系,找到此slot所在的节点,然后到这个节点对key进行操作

操作示例

(1)读写key

(2)添加redis节点 例如现有3个redis节点,每个节点各负责一半数量的slot,16384/3 = 5461个 现在想添加一个redis节点,可以从 节点1、节点2、节点3 中各拿出一部分的slot,移到新节点 每个redis节点中的slot数量可以不一致,根据节点性能适当分配

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2016-01-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Web性能压力测试工具http_load,webbench,ab,Siege详解

1. http_load http_load是基于linux平台的性能测试工具,它体积非常小,仅100KB。它以并行复用的方式运行,可以测试web服务器的吞吐量...

604110
来自专栏FreeBuf

子域名搜集思路与技巧梳理

前言 本文适合Web安全爱好者,其中会提到8种思路,7个工具和还有1个小程序,看本文前需要了解相关的Web基础知识、子域名相关概念和Python 程序的基础知识...

59480
来自专栏Rainbond开源「容器云平台」

好雨云帮更新志( 2017.04.03-2017.04.16)

13420
来自专栏ThoughtWorks

DocBook 让文档版本化

image.png #ThoughtWorkers好声音# 第十六期(图片:网络) 你们都知道ThoughtWorks曾经是扛敏捷的大旗的,你们也都知道敏捷是...

33460
来自专栏腾讯DevOps

Git的艺术—分支管理

Git的开发者—— Linus Benedict Torvalds,22岁就创建了Linux系统,发展到2005年的时候,用了仅两周的时间写了一个分布式版本控制...

620100
来自专栏西二旗一哥

iOS - AOP Program for iOS

AOP(Aspect Oriented Programming) 通常译为 面向切面编程。在工程中常用来分离具体的业务逻辑,个人理解为从不同维度来增加新的业务逻...

21030
来自专栏腾讯Bugly的专栏

手Q Android缓存监控与优化实践

死锁问题对产品的影响是巨大的,那么是否会有效的方法能够监控Android应用的死锁呢?

847120
来自专栏子勰随笔

SDK设计心得之接口设计

2.1K90
来自专栏MongoDB中文社区

MongoDB 3.6中的新功能 (1) - 发展的速度

New in MongoDB 3.6. What’s New in MongoDB 3.6. Part 1 – Speed to Develo

15410
来自专栏开源优测

你离测试开发还有多远?

你可能差20000行代码的积累,但你写了200行的hello world来告诉自己不行

10330

扫码关注云+社区

领取腾讯云代金券