一, redis 淘汰机制
一个完整的淘汰机制 应该包含’ 淘汰策略 和 删除策略
淘汰策略 最近最少使用 和 最近不经常使用
一个是通过 最后一次被访问的时间 一个是通过一段时间内的被访问次数
删除策略 实时删除 定时删除 惰性删除 最大值删除
惰性删除 当淘汰的记录达到一定量时删除
二, redis 缓存击穿 缓存穿透 缓存雪崩
击穿:热点key失效 导致大量访问直接访问数据库 造成数据库崩溃
解决方案:1 异步更新:在热点key快要过期时另起一个线程 去访问数据库 然后重新set一下热点key 刷新过期时间
穿透: 当访问redis中不存在的数据时 请求会去访问数据库 而这个字段在数据库中也没有
1.接口验证:验证请求接口是否符合规范 不规范的请求直接拦截
2.返回空key:当访问redis中不存在的数据时 redis自动生成一个此数据key但是value为null 并拥有极短的过期时间
3.添加互斥锁 让抢到锁的线程才能去访问数据库查询数据 其余线程被阻塞
雪崩: 大量key同时失效 和 redis宕机 大量请求直接访问数据库
1: 随机失效时间 防止大量key同时失效
2: 搭建redis集群 即使一个redis宕机 还有高可用策略 主备切换 服务不断
三,redis 持久化 方式
1 快照 对当时内存数据全量复制存到磁盘
2 日志 对增量的命令记录到日志文件中存入磁盘
可以定时让备用节点做快照 恢复时先快照恢复 再将增量的数据通过日志恢复
四,redis 哨兵模式
哨兵也是一个redis 它可以监控集群中其他哨兵和redis的状态
并且 拥有控制redis状态的能力 通过过半原则投票决定改变状态 所以通常集群是单数
五,redis 主备模式
master 拥有对外拥有写功能
备用redis 拥有对外拥有读功能 分担主节点的压力
六,redis 主备数据同步
主节点首先发送当时快照 给备用redis 备用节点收到后会删除之前的数据 进行快照恢复 恢复完成后发送一个消息给主节点 主节点再将 增量的命令log 发送给备用节点 备用节点收到后执行log中命令。