Redis集群分析(1)

1、 简介
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间索引半径查询。 Redis 内置了复制,LUA脚本, LRU驱动事件,事务和不同级别的磁盘持久化, 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性。

2、 redis集群

通常情况下redis是一个单机的Nosql数据库,要使用redis的集群需要根据自身的需求,确定使用哪一种集群。

redis的集群模式大概有三种:主从模式、哨兵和自动分区。

主从模式

单机的redis会遇到单点压力的问题,即同时访问redis的客户端太多,redis无法及时处理。为了解决这个问题redis使用主从模式,简单来说就是多启动几个redis,将请求发送给别的服务器,分担压力。

使用这种方式有一个要求,就是集群内部的数据一致性。redis为了解决集群内数据的一致性,使用了主从模式:集群内只有一台机器为主服务器,主服务器既有读也有写的权限,其他机器都是从服务器,从服务器只有读的权限。从服务器在加入集群的时候会复制主服务器的数据,保证两者的数据一致,随后主服务器发生写操作的时候,主服务器会将操作发送给从服务器,保证集群的数据一致。

在这里插入图片描述

哨兵

主从模式有一个问题:当主服务器挂机后,整个集群就丧失了写权限,导致集群不可用。为了解决这个问题redis提供了哨兵模式,简单来说就是再创建一个集群用来监控主从模式中的服务器,当哨兵发现主服务器挂机后,将一个从服务器再转换为主服务器。
在这里插入图片描述

自动分区

主从模式和哨兵主要是解决的是单点压力问题,而自动分区解决的是另一个问题:数据量太大了,单机的内存不够用。解决方式也很简单,单机不够用,就用多台机器一起进行存储,将数据分成多片,存储在不同的机器上。

数据分片可以使用hash的方式来做,简单来说就是对数据的key进行hash取模,得到的数字就是数据需要存储的机器的编号。但是这种方式有一个问题:不利于集群的扩张。具体说就是当有一台新的机器要加入到集群的时候,需要更改hash取模的模数,但是如果更改了模数会导致集群内已经存储的数据,存储出错(改前计算的存储位置和改后计算的存储位置不同)。这样就需要将原先所存储的所有数据取出来再进行一次新的hash取模运算。

redis为了解决上述问题,提出hash槽的概念。他将hash取模的模数固定,固定为16384个。每一个视作为一个槽位,然后让集群里的机器认领槽位,存储分布道改槽位的数据。当新的机器加入集群的时候,只需要重新分配槽位,然后一堆指定槽位的数据便可。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值