趣话Redis→轩辕的编程宇宙

好用的插件

1. sider:帮你显示视频的文字,方便自己的总结

redis为何诞生

  1. 可以模仿 CPU 给数据库加一个缓存
  2. redis的登记数据是存在内存中的,不用再和Mysql执行IO操作了

redis的更新:随着问题的出现

  1. 遇到问题:内存可能会存满,
    1. 给缓存设置过期时间,不能全部都扫一遍(扫描需要删除的键值),只是随机选择一部分释放
  1. 问题出现:有的键值运气好,没有被扫描到
    1. 使用惰性删除:在查询时,发现其已经过期了,就主动删除

  1. 问题:有的键值既躲过了随机淘汰算法,又一直没有被访问,迟早要完
    1. 出现了内存淘汰策略

缓存击穿:

  1. 当查询的数据在redis是不存在的,就会查询数据库
  2. 因为:又一个热点数据被我删除了,随后就有大量的请求过来了

缓存雪崩:

  1. 因为:在redis同时失效了一大批热点数据,然后有一大批请求打过来,把mysql给打趴下了

解决问题:

  1. 把键值的时间随机一下,热点数据永不过期的策略

redis:数据持久化

  1. RDB方案:把数据备份到RDB文件(二进制格式)里面,然后存到硬盘上
  2. 创建一个子进程来备份数据:按照自己配置的参数

问题出现:按照分钟级别的备份,要丢失很多数据

  1. 解决:不用在备份时遍历所有的数据,可以记录了我对数据执行更改的所有操作,像是insert、update、delete等等动作

解决问题:AOF持久化

  1. 把执行所有写入命令记录下来,但是多久执行一次呢?→aof_buf就问世了

问题:AOF文件会越来越大

    1. 开始尝试去掉冗余的指令,后面发现工作量太大了;发现很多中间状态都是不需要的,为何不记录最终的状态呢?比如三条指令合并

问题:AOF重写数据不一致的问题

解决问题:

  1. 在重写子进程开始时,后面的写入操作放入aof_rewrite_buf缓存区中,等fork子进程重写完成,在把重写缓存区的数据同步的AOF文件中,在进行重命名

redis帮手:多几个实例

主-从模式:

  1. 让redis高可用,主节点负责写数据,从节点负责读数据

命令传播:

  1. 从节点先同步RDB的数据,然后主节点缓存了一些删除、修改指令,也会把这些命令挨个通知到从节点

问题:一个从节点不小心掉线了,需要主节点同步最新的RDB文件吗?

  1. 解决:主节点在传播指令时,也把数据同步一份到缓冲区,然后从节点掉线后,同步数据就不需要从头再来了

问题:主节点缓存的数据是从节点需要的吗?能不能对得上呢?

  1. 解决:使用游标偏移量,后面比较各自的偏移量

问题:当主节点挂了,还要手动选择从节点来当主节点

  1. 哨兵 sentinel 是管理员,有多个管理员,主要复杂 ping 下面的小弟,R1/R2/R3,每隔10s看他们挂了没

  1. 如果一个管理员发现ping不上,判定为主观掉线,当3个管理员都ping不上时,在进行故障转移

怎么进行故障转移:

  1. 把主节点变成从节点
  2. 在从节点选择一个来当主节点

问题:管理员怎么选择主节点

  1. 可以根据从节点的硬件配置来设置优先级,
  2. 根据跟主节点断开时间,断开时间越短,优先级是越高的
  3. 根据游标偏移量,偏移量越大的数据是越全的,优先级是越高的

最终实现:完成了故障转移、构成了一个高可用的缓存服务

  1. 问题:不同的节点可以缓存不同的数据的,不用每一个节点都缓存所有的数据,不然浪费空间的

Redis集群是怎么如何工作的呢?

  1. 问题:哨兵模式、主次模式只能解决高可用的问题,但是解决不了数据量大的问题,都存储了全量的数据

解决:变成一个大的缓存服务器,每一个集群存储一部分数据

问题:在集群进行团队建设后,怎么加入新的集群

  1. 要告诉我 ip 和端口:进行三次握手,MEET,pong,ping(回显)

问题:集群有了,得解决存储问题

  1. 模仿哈希表,总共有16384个哈希桶,也叫做槽位

问题:为了达成数据一致,要告诉谁负责哪些槽位,1万多个槽位,数据量有点大

  1. 让每个槽位由 1 bit来负责,由自己负责的是1
  2. 问题:虽然传输室快了,但是当读写时,总不能在1万多个看哪一个是1吧

问题:使用空间换时间

  1. 由一个超大的数组,来存储每一个槽位是由哪一个redis集群来控制的,cluster

  1. 数据在读写时,先检查是否由我负责,MOVEO

问题:集群中万一挂了一个,就要整体下线了

  1. 需要一个 backup (支援,备用品),需要一些从节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值