redis-day02

Redis

过期数据


注: 过期数据会在Redis存储空间中额外占用一块地方(expires),里面存储的字段-值的形式的哈希存储,字段存储了过期数据的存储地址,值存储了过期数据的过期时间,通过这块区域的字段找到相应的过期数据的存储位置,然后删除掉过期数据


处理方式

1.定时删除:(不建议用)

​ 到点就删,节约内存,但是占用cpu很大,很耗性能,拿时间换空间

2.惰性删除:

​ 数据到期也不做处理,直到下一次访问该数据时才删除,节约cpu性能,拿空间换时间。

3.定期删除:

周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度,是一个折衷的方案。

数据淘汰策略

1.LRU :

​ Least Recently Used:长时间不用的数据会被优先淘汰

2.LFU :

​ Least Frequently Used:一段时间内使用次数少的会被优先淘汰

主从复制

1.同步数据


注: 数据提供方master将数据同步到数据接收方slave上,master一般进行写操作,而slave只进行都操作,这样便实现了读写分离,由slave分担了master的负载,实现了负载均衡,同时当master出现问题的时候,由slave提供服务,快速实现故障恢复,通过数据的热备份,即一种数据冗余的方式,来实现数据的持久化,即当master宕机后,由于slave和master的数据同步,slave可以替代master,相对于数据来说,只不过是搭载的角色由原来的master变成了新的master,其他没有太大变化,实现了持久化存储。


2.工作流程

1.建立连接阶段

​ slave发送连接的指令,master接收到后,给予响应,slave受到响应后,将反馈过来的master的IP和端口进行保存,然后根据保存的信息创建连接master的socket,然后再周期性的ping master,这样时刻与master保持连接,master则响应pang,此后slave发送指令告诉master它自己的端口号,这样master可以通过传送过来的端口号来对slave进行其他操作。

2.数据同步阶段

​ slave发送请求,请求与master进行数据同步,master接收到请求后先将数据保存并且打包,而且在第一个slave与master连接时,master会创建一个复制缓冲区(队列),打包保存后,生成了RDB文件,然后通过socket发送给slave,slave接收到了RDB,清空自己原有的数据,并进行RDB文件的恢复过程,这一过程称为全量复制,而在master将数据打包保存变成RDB之后的时间内,其他的指令便会被保存在复制缓冲区,然后在全量复制过程完成后,slave会告知master,RDB已经恢复完成,这样master就会将复制缓冲区的信息发送给slave,slave则执行命令,恢复数据,而这一过程便成为部分复制,至此数据同步才算是完成。


注: 如果复制缓冲区设置的过小的话,当全量复制这一过程中缓冲区内数据满了,就会溢出,造成部分数据丢失,然后在slave进入部分复制的过程的时候,发现丢失了数据,就会再一次进行全量复制,这样就使得slave陷入了死循环状态。所以建议在此期间关闭对外服务。


3.命令传播阶段

​ 当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的状态,哦同步的动作则称为命令传播。

​ 心跳机制

​ 1.master心跳:ping slave,看看slave是否在线。

​ 2.slave心跳:汇报自己的复制偏移量,获取最新的数据变更指令,同时看看master是否在线。

3.常见问题

1.频繁的全量复制

​ 1.master重启导致

​ 内部优化调整方案:在master内部创建master_replid变量,在master持久化RDB,并传送给slave时,runid也会被传送给slave,本机保存上次的runid,重启后恢复该值,那么slave通过该值确认master是否还是原来的master。

​ 2.网络中断,slave不提供服务,复制缓冲区太小,断网后,溢出,触发全量复制

​ 优化复制缓冲区空间

2.数据不一致

​ 优化主从间的网络环境,通常放置在同一个机房部署。

哨兵模式


注: sentinel监控每一个主从结构中的服务器的情况,当master宕机后,多个slave没有了master,不能再向外提供服务,这时便由哨兵们通过投票选举的办法选出一个slave任命为master,代替以前的master,继续向外提供服务。每一个sentinel都会对所有的服务器进行监控,sentinel越多,投票选举出的master越精准。


1.监控阶段

​ 同步信息

2.通知阶段

​ 保持联通

3.故障转移阶段

​ 此阶段内出现问题,master下线,哨兵们通过内部的投票选举,来竞选出负责人,然后负责人根据优化方案,即不在线的out掉,响应慢的out掉,与原master断开时间久的out掉,最后根据优先原则:优先级,offset,runid来选出新的master,其他slave则与新官建立连接,原master变为slave故障恢复后连接。

Cluster集群

数据存储设计

​ 通过算法设计来计算key的存储空间


注: Redis存储空间可以被多台服务器所承担,每台服务器可以有很多,整个存储空间可以有16384个槽,可以说一个槽就是一个小的存储空间,里面可以存有很多数据,每个服务器都有其他服务器包含的槽的信息,即哪台服务器有哪些槽。当进行数据查询时,最多两次就可以命中,找到数据的存储位置。如果新部署了一台服务器,没有槽,可以从其他服务器中拿过来一些槽作为自己的,即分槽。当想要一个master下线的时候,需要将它的槽分给别人,只有当它没有了槽之后才可以允许正常辞职下线。


自带主从切换

企业级解决方案

缓存预热

缓存雪崩

缓存击穿

缓存穿透

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值