redis数据库
- 特点
- 应用场景
- 持久化
- 哨兵集群
- Redis cluser集群
一、简介:
场景:当你的后端数据库压力较大时,会使用redis来做缓存。缓解后端数据库压力
1、特点:
(1)内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2)Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构
(3)Redis支持数据的备份,即master-slave模式的数据备份。的存储。
(4)集群功能是非常重要的,可以在Redis异常挂掉后不影响客户端的使用
(5)性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
(6)原子-Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。(事务)要么执行成功、要么执行失败
二、持久化
持久化的应用场景:
(1). 愿意牺牲一些性能(选择AOF);
(2). 换取更高的缓存一致性,保证数据库最高可能的完整性(选择AOF);
(3).愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份(RDB);
1、实现数据持久化的两种方式(抽象描述)
(1)使用截图的方式,将内存中的数据不断写入磁盘(性能高、可能会引起一定程度的数据丢失)(RDB)
(2)使用类似mysql的方式,记录每次更新的日志(AOF)
2、两种模式对比
RDB实现Redis数据持久化(默认方式)
1、将Reids在内存中的数据库记录,定时dump到磁盘上,类似于快照功能。
优势:
(1). 一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的
(2).对于灾难恢复而言,RDB是非常不错的选择。
(3). 性能最大化。
(4). 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。
·
缺点
: RDB缺点:因为是特定条件下进行一次持久化(每隔一段时间),就可能会导致一旦redis崩溃,再次回复时,可能会导致部分数据丢失。
AOF实现redis数据持久化:
2、append only file–原理是将Reids的操作日志以追加的方式写入文件,近似实时性。
优势:
1). 该机制可以带来更高的数据安全性,
2)(备份和恢复没有RDB要快)
(AOF跟RDB相对比,会产生大量的磁盘I/O,影响了服务器的性能)
两者区别:
AOF:相比于RDB持久化方案的优点:
(1)数据非常完整,故障恢复丢失数据少
(2)可对历史操作进行处理
(重点:RDB和AOF同时存在AOF生效)
三、哨兵集群
1、哨兵的作用
(1)检测redis是否正常运行,可以根据住的状态获取到整个集群的状态
(2)可以故障切换,主坏了,从顶替上。(哨兵进行投票)
(3)哨兵最好部署在单数,进行投标不会出现票数平衡的情况
(4)客户端会先访问哨兵
,获取到主的信息之后、返回给客户端信息,之后客户端访问主。如果故障切换并且会实时更新新主的地址
2、哨兵的状态:sdown、odown、failover状态
(1)sdown主观下线:有一个哨兵认为主服务器坏了(1个人)
(2)Odown客观下线:大部分哨兵认为主服务器坏了(超过一定数目的人)
(3)Failover转移:多数哨兵认为主坏掉的时候,开始故障转移
四、Redis cluser集群
简述:
首先是一个分布式存储的一个集群,数据分散在不同的节点
例子:三组redis主从集群组成的一个集群
优点:分布式存储、缓解单点瓶颈、冗余、存储量大
原理:
注意
:多组redis主从组成的一个集群(主从数量最好控制在单数)
·
原理:
(1)集群有16384个哈希槽的一个机制,把这些哈希槽分散到这个集群的所有集群的节点上。每个节点负责的范围不一样。(这些节点必须有一个从)
·
(2)Redis接受的写请求(k/v形式存储)的时候,会根据Crc16的算法得出一个结果,跟这个结果会和16383求余数。这样每个k/v都会对应在0-16383之间的哈希槽,通过这个值会去找到负责这个编号的节点中,最后会进行存储操作。
·
(3)如果当中的一台主节点坏了,可以把他的从提升为新的主。因为从本身也有着跟主一样的数据。提升的方式,是由其他主节点进行投票完成