- Master 写内存快照 save命令 会调rdbsave 函数 会阻塞主线程的工作 会间断性暂停服务 所以 Master 最好不要写内存快照
- Master aof 持久化 如果 不重写 aof 文件 这个持久化 方式 对性能的影响 是 最小的 但是 aof 文件 会 不断 增大 包括 内存快照 和 aof 日志文件 特别 是不要启用 快照 持久化 如果 数据比较 关键 某个slave 开启aof 备份数据 策略 每秒同步一次
- Master 调用 bgrewriteaof 重写aof 文件 aof 在重写的时候 会占大量的 cpu 和内存资源 导致 服务 load 过高 出现短暂的服务暂停现象
- redis 主从复制性能 为了主从复制的速度和稳定性 slave 和Master 最好曾同意局域网内
缓存穿透
是指数据库中没有数据 而用户 不断的发起请求 像一些不存在的数据 这个时候 会导致数据库压力过大
解决: 接口层加校验
如果 缓存 和数据库 取不到数据 这是将key-value对写为key-null , 把缓存的过期时间设置短点 这样可以防止用户的暴力攻击
缓存击穿
是指 缓存中没有数据 但数据库有数据 一般是因为缓存过期 这是 由于并发用户特别的多 同时没有读到数据 又同时去数据库 取数据 引起 数据库压力 瞬间 增大 造成过大压力
解决: 设置热点 永不过期 加互斥锁
缓存雪崩
是缓存的大批量数据到过期时间 而查询数据量巨大 引起的数据库压力大 甚至 宕机
和缓存击穿不同的是 缓存 击穿 指的是 并发查询一条数据 缓存雪崩是不同数据都 过期了 很多数据都查不到而查数据库
解决:
- 缓存的 过期时间设置随机 防止同意时间大量过期现象发生
- 如果是分布式部署 将热点数据均匀分布
- 设置热点数据用不过期
- 采用限流
- 高可用做集群