漫谈Redis-单实例、主从、哨兵、集群

1.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

2.性能极高,原子性 – Redis的所有操作都是原子性的,多个操作也支持事务,有丰富的数据类型:
String(字符串)
List    (列表)
Hash (字典)
Set    (集合)
Sorted Set(有序集合)

3.持久化:持久化是最简单的高可用方法,主要作用是数据备份,即将数据存储在硬盘,与memcached相比的大优势就是持久化,保证数据不会因进程退出而丢失。它分两种方式备份数据:RDB 与 AOF,现在用的最多的是 AOF格式,它的原理是记录每次 写命令到日志中,恢复时,丢失的数据更少

4.复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

    (1)单实例模式:最简单的模式,直接启动redis.conf即可,缺陷:适用于个人测试
    (2)主从模式:主从实现了数据备份与 负载均衡,缺陷:写操作无法负载均衡;存储能力受到单机的限制

5.哨兵:在复制的基础上,哨兵实现了自动化的故障恢复。 负载均衡,缺陷:写操作无法负载均衡;存储能力受到单机的限制。楼主在实际项目中就是用的此模式

6.集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

7.今天的主角是集群,Redis 在3.0版本前只支持单实例模式,主从模式、哨兵模式部署来解决单点故障,楼主我,现在应用在项目中的是哨兵模式, 但是现在互联网企业动辄几百G的数据,单机是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。

Redis集群的实现原理:Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。
Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。

这里写图片描述

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key

(5)Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

最后集群的搭建,将在下一篇发布出来

猜你喜欢

转载自blog.csdn.net/zhuyu19911016520/article/details/81089008