Redis复习思维导图
2021-06-26 14:36:29 0 举报
AI智能生成
redis 思维导图
作者其他创作
大纲/内容
Redis
Redis线程模型
IO多路复用
读写串行无锁化
Redis持久化
RDB
优点
体积小
恢复速度快
缺点
容易丢数据
save和bgsave对比
IO类型:save同步,bgsave异步
是否阻塞redis其他命令:save阻塞,bgsave非阻塞
复杂度:O(n)
优点:save不会消耗额外内存;bgsave不会阻塞客户端命令
缺点:save会阻塞客户端命令;bgsave:需要fork子进程,会消耗额外内存
AOF
安全性高
文件体积大
恢复速度慢
AOF持久化策略
always
everysec(推荐)
no
AOF重写
混合持久化
RDB和AOF比较
启动优先级:RDB低,AOF高
体积:RDB小,AOF大
恢复速度:RDB快,AOF慢
数据安全性:RDB容易丢数据,AOF根据策略来定
Redis的备份策略
写定时调度脚本,每小时copy一份RDB或AOF目录的备份到另一个目录中去,仅仅保留最近48小时的备份
每天都保留当月的数据,可以保留最近一个月的备份
每次copy备份的时候,把太久的备份删了
每天晚上把当前机器上的备份迁移到另外的机器上,以防机器损坏
Redis数据结构
String
Hash
List
Set
Sorted Set
Redis集群
主从复制
全量复制
增量复制
复制风暴问题
哨兵+主从集群
哨兵作用
集群监控
故障转移(重新选举主节点)
消息通知
新的主节点选举出来后,通知从节点连接新的主节点同步数据
通知客户端连接新的主节点
Redis Cluster
原理
无中心结构,支持动态扩容,对业务透明
具备哨兵的自控和故障转移能力
客户端不需要连接集群的所有节点,只需连接其中一个节点即可
高性能,客户端直连redis服务,避免了proxy的损耗
运维复杂,数据迁移需要人工参与
只能使用0号数据库
不支持批量操作
分布式逻辑和存储模块耦合
Redis缓存相关问题
缓存穿透
原因
解决方案
接口层增加校验,拦截非法请求
缓存空数据,过期时间设短一点
布隆过滤器
缓存雪崩
同一时间缓存大面积失效
Redis缓存实例宕机
事前
高可用分片集群,避免全盘崩溃
缓存的失效时间随机
热点数据预热
更新缓存加互斥锁
准备降级方案
事中
增加本地缓存
hystri服务限流降级,避免数据库被打死
事后
Redis开启持久化,一旦重启,自动从磁盘加载数据,快速恢复缓存数据
缓存击穿
设置热点数据永不过期
更新缓存数据加互斥锁
缓存数据库双写一致性
先删缓存,再更新数据库
先更新数据,后删除缓存
延时双删,安慰剂,未解决问题
BigKey
什么是BigKey
单个string过大
单个集合中元素过多
危害
导致Redis阻塞
网络拥塞
过期同步删除,存在阻塞redis的可能
产生
社交类:明星或者大V粉丝列表
统计类:大流量系统按天存储某项功能或者网站的用户集合
缓存类:把缓存当数据库用,加载大容量大体积的数据到缓存中
如何优化
拆:分段存储
选择合适的数据类型(推荐)
控制key的生命周期
Redis慢调用排查
是否用了慢调用命令
是否对key设置了相同的过期时间
是否存在bigkey
Redis配置的AOF级别是什么?业务是否需要这一可靠等级
Redis实例的内存是否使用过大?是否发生了swap
是否运行了Redis主从集群?如果是,主库内存控制在2-4G,避免主从同步,从库因加载RDB导致拥塞
Redis为什么这么快
基于内存实现
使用IO多路复用,非阻塞IO
单线程模型,避免了线程的上线文切换
高效的数据结构
动态字符串
双向链表
压缩链表
跳跃表
哈希表
整数数组
根据实际的数据类型选择合适的数据编码
Redis数据淘汰
不进行数据淘汰
进行数据淘汰的策略
在设置了过期时间的数据中进行淘汰
在所有数据中进行淘汰
0 条评论
下一页