Redis集群模式
哨兵模式:是官方推荐的高可用方案,但不是真正的高可用;哨兵模式是在主从基础上实现的,每个节点部署哨兵,涉及到主观下线和客观下线,当半数以上的哨兵任务master宕机后,会根据优先级在从节点中选取一个成为新的master,当坏掉的master恢复后,会自动成为从节点,解决了主从集群的单点故障问题,但是所有的节点提供相同的服务,资源有点浪费;
去中心化集群模式:采用无中心化结构,每个节点保存数据和整个集群状态,每个节点中间能够进行内部通讯,redis-cluster集群内设置了16384哈希槽,0-16383,当要存储一个key-values时,redis会对key进行crc16运算。用这个结果对16384进行取余,然后将这个key分配到对应的节点哈希槽中;当连接任何一个节点获取这个数据时,也会有这样的算法,然后内部跳转到存放key的这个节点;去中心化一般也会做成主从模式,一个主节点对应多个从节点,当主节点宕机后,从节点会成为新的主节点;当主节点没有从节点时,集群不可用,当主节点和从节点同时失效,集群不可用;
Redis去中心化集群特点
(1)相同的主从节点不会出现在同一台机器上;
Mr.Li
(2)数据写入按照负载均衡算法均匀分配;
(3)只有相同的主节点同时宕机。造成槽点不完整,集群才会宕掉;
(4)16834个槽点平均分配在主节点上;
redis持久化的方式
(1)RDB方式:相当于把整个数据进行快照;在进行快照的时候可能会产生新的数据,导致数据不完整;
Mr.Li
(2)AOF方式:完整性会高一些;因为AOF记录数据的写操作指令,重启之后,只需要将这些写操作指令重新执行一次,就可以恢复数据;
(3)一般使用RDB方式,因为两种方式都开启的话,会对redis造成很大压力;RDB完整性虽然不高,但是影响也不大,数据库中还有一份,只需要同步到redis就行;
redis和MySQL的区别
1)MySQL:支持事务,支持sql语句查询,使用固定的表结构,可以复杂查询,存储数据单一;MySQL是基于磁盘操作,在高并发下,磁盘的IO是很大的瓶颈;
Mr.Li
(2)不支持事务,不支持表结构,存储数据比较灵活,基于内存操作,读写效率相对MySQL比较高;
redis针对内存过高,怎么解决?
(1)设置key的过期时间,对于一些不常用的key过期时间设置小一些;
Mr.Li
(2)redis会将所有设置过期时间的key放在一个字典中,每隔一段时间从字典中随机抽取一些key来检查过期时间,并删除已经过期的key;
redis一般存储什么数据
(1)热点数据:一般会存储一些经常查询且变动不是很频繁的数据;比如:新闻网站时事热点,微博热搜等,需要频繁更新;数据量大的时候直接从数据库中查询会影响性能;
Mr.Li
(2)电商网站信息:大型电商平台初始化页面数据数据的缓存;比如网购机票时首页的价格和你点进去的价格会有差异;
MySQL和redis为什么结合使用
当网站的处理量和访问量非常大的时候,数据库的压力非常大,数据库处理数据的能力会降低;使用redis,将表中经常访问的数据记录到redis中,用户在查询时先去查询redis中的数据,没有的话再去查询MySQL,由于数据是存储在内存中,处理速度会非常快;
Mr.Li
redis哨兵原理
哨兵是一个独立的进程,原理就是哨兵通过发送命令,等待redis主节点相应,超过指定的时间主节点没有响应,哨兵会任务主节点下线,选取一个从节点成为主节点;
Mr.Li
其中设涉及一个主观下线和客观下线;指定时间内哨兵没有目标节点的响应会认为该节点主观下线;当半数以上的哨兵任务该节点下线则认为是客观下线,会在从节点中选取一个新的主节点;