数据持久化
RDB方式的持久化是通过快照完成的,当符合一定条件是Redis会自动将内存中的所以数据生成一份副本并存储在硬盘上,这个过程就是“快照”。简单理解:RDB是全量同步,需要知道触发的场景。
AOF方式的持久化是通过增量的方式同步,将Redis执行的每条写命令追加到硬盘文件中。简单理解:AOF是增量同步。
注意:由于系统缓存机制,AOF增量同步会先同步到硬盘缓存中,每30秒写到硬盘。
Redis可以配置同步频率。
1、每次AOF写入一个命令都会执行同步操作,这是最安全也是最慢的方式;
2、每秒钟进行一次同步操作,一般来说使用这种方式已经足够;
3、不主动进行同步操作,这是最不安全的方式。
主从复制(灾备或数据冗余)
哨兵自动发现
1)每10秒哨兵会向主库和从库发生INFO命令
自动加入从库
2)每2秒哨兵会向主库和从库 哨兵频道发生自己的信息(哨兵、主库信息)
自动加入哨兵
3)每1秒哨兵会向主库、从库和其他哨兵节点发生PING命令
自动故障恢复
故障恢复
当哨兵PING的节点未通时,认为该节点主观下线,(主观下线表示当前哨兵认为其已经下线)如果该节点是主库,哨兵询问其他哨兵这个库的情况,当大于半数哨兵认为这个节点主观下线,哨兵会认为其客观下线,并选举领头的哨兵,发起故障恢复,自动切换主库,从变主,主变从。
集群
旧版redis用客户端分片实现集群,让客户端根据主键计算落到哪个库。
缺点:水平扩容比较复杂、难度大,分片后,增加节点,需要重新分区对数据进行手工迁移,为了保证数据一致性,集群还需要暂时下线。
解决办法:预分片技术,初期考虑好存储规模,分好足够多的库,(前期数据量小,一台机器上部署多个实例),后期数据多扩容时,只需要将一些实例迁移到新机器上,不需要重新分片并下线、数据迁移。
哨兵与集群的区别
从特效上看,哨兵可以视作集群的子集,在不需要分片的情况下,哨兵就足够使用。如果需要水平扩容就需要使用集群
新的集群方式
通过对键的有效部分,进行hash,分配在hash环上。
对于涉及多键的命令(如mget) ,如果每个键都位于同一个节点中,则可以正常支持,否则提示错误。
有效部分指:键全名是or {xxx},大括号里面的内容。
这样{user01}.name 和 {user01}.age可以分配到同一个分区,可以用mget获取。