- redis数据持久化
- 持久化就是把内存的数据写到磁盘中,防止服务宕机导致内存数据丢失。
- redis持久化机制(rdb默认/aof):
- rds:redis database,快照。按照一定的时间将内存中的数据以快照的形式保存到硬盘中去,对应产生的数据文件为dump.rdb。
- aof:append only file,将redis执行的每次写命令记录到单独的日志文件中,当重启redis时会重新将持久化日志中的文件回复数据。
- redis key过期策略
定时过期;每个key会创建一个定时器,过期就删除;但是会占用大量的cpu资源去处理过期数据;- 惰性过期:访问一个key的时候,去看这个key是否过期;对内存不友好;
- 定期过期:定时扫描一定数量的key,清除过期的key;
- redis内存淘汰策略(2000w数据,redis只有20w,怎么保证redis中都是热点数据)
- 全局key的选择性移除:当内存不足以写入新数据的时候,怎么淘汰原来的key,redis默认是移除最近最少使用的key
- 设置过期时间的key选择性移除:内存不足时,移除设置过期时间中的最近最少使用的key。
- 支持事务
- redis的事务是具有持久性和一致性;
- 但是不支持隔离性,因为redis的事务是不保证原子性和回滚的,事务中的命令执行失败,其他命令还是会正常执行的;
- redis的事务支持lua脚本,脚本内的数据可以一次性,按顺序执行,利用这个可以在redis分布式缓存的时候,set命令和expire命令写在lua脚本中,实现原子性;
- 支持的数据结构
- string; list; sortedlist; set; hashmap
- 集群模式(哨兵机制:redis高可用)
- 哨兵机制用来实现redis的高可用:判断master是否故障,需要哨兵集群大多数都同意才能判定,那么会涉及到分布式选举的问题;哨兵集群部分节点挂了,还是能正常工作的;哨兵集群至少需要3个实例(zookeeper也是),只保证高可用,不保证数据0丢失。
- 集群监控:主从模式上加一层哨兵机制,用来监控slave和master进程是否正常工作;
- 消息通知:如果redis实例有故障,那么哨兵会发送消息报警给管理员;
- 故障转移:如果master挂掉了,那么重新选主;
- 配置中心:重新选主,会通知客户端新的master ip。
- 哨兵机制用来实现redis的高可用:判断master是否故障,需要哨兵集群大多数都同意才能判定,那么会涉及到分布式选举的问题;哨兵集群部分节点挂了,还是能正常工作的;哨兵集群至少需要3个实例(zookeeper也是),只保证高可用,不保证数据0丢失。
- 主从架构
- redis复制的核心机制
- redis采用异步的方式进行复制;
- slave复制的时候,不会block自己的查询,此时会用旧的数据集,但是复制完毕后,需要删除旧数据集,加载新的,此时会关闭对外的读服务;
- slave节点主要是横向扩展,读写分离;
- 如果用了主从复制架构,那么master必须开启持久化,因为可能master宕机了,数据是空的,哨兵还没有检测到,master又重启了,然后复制到slave,slave此时也是空的;
- 主从复制原理
- 首次ms关系时,slave会发送全量复制sync给master,然后master会在后台保存快照,并将期间收到的写命令缓存到内存,然后发送给slave
- slave收到命令后,会本地持久化到磁盘,然后加载到内存中执行;
- 之后master所有的写命令都会同步给slave
- 但是这样会给master造成很大的压力,所有redis实际采用的主从从架构。
- redis复制的核心机制
- redis集群最大节点数
- 16384 2的14次方
- 缓存异常
- 缓存穿透
- 缓存雪本