开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天(点击查看活动详情)
上一篇写了redis的基本知识可以点过去看看,有介绍Redis的基本数据类型,应用场景等
接下来总结一下RDB AOF持久化的优缺点,哨兵,主从同步的知识点,还有锁的知识点
持久化
RDB用作冷备
RDB 持久化机制,是对 Redis 中的数据执行周期性的持久化。
优点:RDB对Redis的性能影响非常小,是因为在同步数据的时候他只是fork了一个子进程去做持久化的,而且他在数据恢复的时候速度比AOF来的快。
缺点:RDB都是快照文件,都是默认五分钟甚至更久的时间才会生成一次,这意味着你这次同步到下次同步这中间五分钟的数据都很可能全部丢失掉,AOF则最多丢一秒的数据;RDB在生成数据快照的时候,如果文件很大,客户端可能会暂停几毫秒甚至几秒。
AOF用作热备
AOF 机制对每条写入命令作为日志,以append-only的模式写入一个日志文件中
优点:AOF是一秒一次去通过一个后台的线程fsync操作,那最多丢这一秒的数据。
AOF在对日志文件进行操作的时候是以append-only的方式去写的,他只是追加的方式写数据,自然就少了很多磁盘寻址的开销
缺点:一样的数据,AOF文件比RDB还要大
哨兵
哨兵+主从 实现redis 集群高可用
集群监控:负责监控 Redis master 和 slave 进程是否正常工作。
消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
故障转移:如果 master node 挂掉了,会自动转移到 slave node 上
配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。
主从同步
启动一台slave的时候,他会发送一个psync命令给master,如果是这个slave第一次连接到master,他会触发一个全量复制。master就会启动一个线程,生成RDB快照,还会把新的写请求都缓存在内存中,RDB文件生成后,master会将这个RDB发送给slave的,slave享到之后做的第一件事情就是写进本地的磁盘,然后加载进内存,然后master会把内存里面缓存的那些新命名都发给slave。
内存淘汰机制
即过期策略
定期期除:默认100ms就随机抽一些设置了过期时间的key,去检查是否过期,过期了就用了。
情性删除:我不主动删,我懒,我等你来查询了我看看你过期没,过期就剧了还不给你返回,没过期该怎么样就怎么样。
定期没有删除、我也没有去查询、怎么办?淘汰机制
锁
以基于Zookeeper 实现分布式锁。每个系统通过Zookeeper获取分布式锁,确保同一时间,只能有一个系统实例在操作某个 Key
以上用来解决因多个系统同时操作(并发)Redis带来的数据问题
最经典的KV、DB读写模式缓存+数据库读写的模式
读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应
更新的时候,先更新数据库,然后再刚除缓存