加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

详解Redis基

发布时间:2018-11-13 17:03:59 所属栏目:编程 来源:kelgon
导读:本文将从Redis的根基特征入手,通过报告Redis的数据布局和首要呼吁对Redis的根基手段举办直观先容。之后概览Redis提供的高级手段,并在陈设、维护、机能调优等多个方面举办更深入的先容和指导。 本文得当行使Redis的平凡开拓职员,以及对Redis举办选型、架

其它必要留意的是,Redis Sentinel实现的自动failover不是在统一个IP和端口上完成的,也就是说自动failover发生的新Master提供处事的IP和端口与之前的Master是纷歧样的,以是要实现HA,还要求客户端必需支持Sentinel,可以或许与Sentinel交互得到新Master的信息才行。

集群分片

为何要做集群分片:

  • Redis中存储的数据量大,一台主机的物理内存已经无法容纳
  • Redis的写哀求并发量大,一个Redis实例以无法承载

当上述两个题目呈现时,就必必要对Redis举办分片了。

Redis的分片方案有许多种,譬喻许多Redis的客户端都自行实现了分片成果,也有向Twemproxy这样的以署理方法实现的Redis分片方案。然而首选的方案还应该是Redis官方在3.0版本中推出的Redis Cluster分片方案。

本文不会对Redis Cluster的详细安装和陈设细节举办先容,重点先容Redis Cluster带来的甜头与破绽。

Redis Cluster的手段

  • 可以或许自动将数据分手在多个节点上
  • 当会见的key不在当前分片上时,可以或许自动将哀求转发至正确的分片
  • 当集群中部门节点失效时仍能提供处事

个中第三点是基于主从复制来实现的,Redis Cluster的每个数据分片都回收了主从复制的布局,道理和前文所述的主从复制完全同等,独一的区别是省去了Redis Sentinel这一特另外组件,由Redis Cluster认真举办一个分片内部的节点监控和自动failover。

Redis Cluster分片道理

Redis Cluster中共有16384个hash slot,Redis管帐算每个key的CRC16,将功效与16384取模,来抉择该key存储在哪一个hash slot中,同时必要指定Redis Cluster中每个数据分片认真的Slot数。Slot的分派在任何时刻点都可以举办从头分派。

客户端在对key举办读写操纵时,可以毗连Cluster中的恣意一个分片,假如操纵的key不在此分片认真的Slot范畴内,Redis Cluster会自动将哀求重定向到正确的分片上。

hash tags

在基本的分片原则上,Redis还支持hash tags成果,以hash tags要求的名目显着的key,将会确保进入统一个Slot中。譬喻:{uiv}user:1000和{uiv}user:1001拥有同样的hash tag {uiv},会生涯在统一个Slot中。

行使Redis Cluster时,pipelining、事宜和LUA Script成果涉及的key必需在统一个数据分片上,不然将会返回错误。如要在Redis Cluster中行使上述成果,就必需通过hash tags来确保一个pipeline或一个事宜中操纵的全部key都位于统一个Slot中。

有一些客户端(如Redisson)实现了集群化的pipelining操纵,可以自动将一个pipeline里的呼吁按key地址的分片举办分组,别离发到差异的分片上执行。可是Redis不支持跨分片的事宜,事宜和LUA Script照旧必需遵循全部key在一个分片上的法则要求。

主从复制 vs 集群分片

在计划软件架构时,要如安在主从复制和集群分片两种陈设方案中弃取呢?

从各个方面看,Redis Cluster都是优于主从复制的方案

  • Redis Cluster可以或许办理单节点上数据量过大的题目
  • Redis Cluster可以或许办理单节点会见压力过大的题目
  • Redis Cluster包括了主从复制的手段

那是不是代表Redis Cluster永久是优于主从复制的选择呢?

并不是。

软件架构永久不是越伟大越好,伟大的架构在带来明显甜头的同时,必然也会带来响应的破绽。回收Redis Cluster的破绽包罗:

  • 维护难度增进。在行使Redis Cluster时,必要维护的Redis实例数倍增,必要监控的主机数目也响应增进,数据备份/耐久化的伟大度也会增进。同时在举办分片的增减操纵时,还必要举办reshard操纵,远比主从模式下增进一个Slave的伟大度要高。
  • 客户端资源耗损增进。当客户端行使毗连池时,必要为每一个数据分片维护一个毗连池,客户端同时必要保持的毗连数成倍增多,加大了客户端自己和操纵体系资源的耗损。
  • 机能优化难度增进。你也许必要在多个分片上查察Slow Log和Swap日记才气定位机能题目。
  • 事宜和LUA Script的行使本钱增进。在Redis Cluster中行使事宜和LUA Script特征有严酷的限定前提,事宜和Script中操纵的key必需位于统一个分片上,这就使得在开拓时必需对响应场景下涉及的key举办特另外筹划和类型要求。假如应用的场景中大量涉及事宜和Script的行使,如安在担保这两个成果的正常运作条件下把数据均匀分到多个数据分片中就会成为难点。

以是说,在主从复制和集群分片两个方案中做出选择时,应该从应用软件的成果特征、数据和会见量级、将来成长筹划等方面综合思量,只在确实有须要引入数据分片时再行使Redis Cluster。

下面是一些提议:

  1. 必要在Redis中存储的数据有多大?将来2年内也许成长为多大?这些数据是否都必要恒久生涯?是否可以行使LRU算法举办非热门数据的裁减?综合思量前面几个身分,评估出Redis必要行使的物理内存。
  2. 用于陈设Redis的主机物理内存有多大?有几多可以分派给Redis行使?比拟(1)中的内存需求评估,是否足够用?
  3. Redis面对的并发写压力会有多大?在不行使pipelining时,Redis的写机能可以高出10万次/秒(更多的benchmark可以参考 https://redis.io/topics/benchmarks )
  4. 在行使Redis时,是否会行使到pipelining和事宜成果?行使的场景多不多?

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读