导图社区 redis
redis基础:哪些数据结构、大量key设置同一时间过期、redis分布式锁;雪崩、击穿、穿透;redis哨兵、持久化。
MySql数据库思维导,包括MySql架构、存储引擎、索引分类和结构、主从复制、分库列表、锁机等内容。
这是一篇关于JVM梳理的思维导图,包括类加载机制、JVM内存结构、垃圾收集器、Java内存模型与线程。
社区模板帮助中心,点此进入>>
英语词性
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
法理
刑法总则
【华政插班生】文学常识-先秦
【华政插班生】文学常识-秦汉
文学常识:魏晋南北朝
【华政插班生】文学常识-隋唐五代
【华政插班生】文学常识-两宋
Redis
redis基础
哪些数据结构
String,Hash,List,Set,SortedSet
Geo,HyperLogLog,Pub/sub
BloomFilter
bitmap
大量key设置同一时间过期
redis可能会出现卡顿,严重的化会出现雪崩
处理方法:时间上加一个随机值
电商首页经常会定时任务刷新缓存,可能大量数据集中失效,这个时候大量用户涌入,可能会造成缓存雪崩
redis分布式锁
setnx挣钱锁后,再expire 加一个缓存时间
问题:中间时间差时,崩盘了,导致分布式无法释放
使用lua脚本,将两条命令合在一起
1亿个key,其中10w个key 是以某个固定一直的前缀开头,怎么查找
用keys指令批量查找
会造成阻塞线程
用scan指令,然后服务端过滤
redis做异步队列
一般使用list结构作为队列,rpush产生消息,lpop消费消息,当没有消息时适当sleep一下
如果不sleep,可以使用blpop命令,没有消息会阻塞
如果1:N消息时
使用pub/sub主题订阅
在消费者下线的时候,生成的消息会丢失
最好使用消息队列 rocketMq
redis实现延时队列
使用scoreset,拿时间戳作为score,消息内容为key调用zadd,使用zrangebysocore 指令获取N秒之前的数据轮询处理
kafka:时间轮
redis持久化,主从交互
rdb做全量镜像
比较耗时,只能隔段时间做,如一天
aof做增量持久化
redis重启时,使用rdb重建内存,使用aof重放近期的操作指令来恢复重启之前的状态
突然掉电会丢失数据
取决aof的sync配置,即刷盘机制
每条指令都sync就不会丢失数据
为了应对高性能,一般会定时sync,如1s一次 ,则会丢失1s数据
rdb原理
父进程fork子进程来做rdb操作
父进程共享数据段,正常读写数据,写脏的数据会逐渐和子进程分离开来
同步机制
主从同步,丛丛同步
第一次使用 bgsave生成rdb文件,由复制节点将rdb镜像加载到内存中
增量使用aof日志同步
类似binlog
redis的集群
redis sential
关注高可用,master宕机时自动将slave提升为master,继续服务
redis cluster
关注扩展性,在单个redis内存不足是,使用cluster进行分片
雪崩、击穿、穿透
雪崩
大量的缓存失效,导致流量打崩db
解决:过期时间添加 随机时间
击穿
某个热点key,由于缓存失效,大并发流量直接打到数据库上,
解法1:永不过期
解法2:互斥锁
穿透
非法流量打到数据,如不存在的key
解决:校验,空时短暂放null,bloomfilter
避免问题的3阶段
事前
redies高可用,主从+哨兵,redis cluster,避免全线崩盘
事中
本地cache缓存 + 限流+降级
事后
rdb+aof持久化,一但重启,快速恢复数据
redis哨兵、持久化、主从、手撕LRU
redis为啥那么快
内存
hashMap模型,o(1)的时间复杂度
单线程
不存在不必要的上下文切换和竞争
多路I/O复用模型,非阻塞
单线程浪费多核CPU
多个redis实例
redis单机瓶颈
redis custer
多个master
后挂slave
哨兵机制
集群监控
负责监控master 和slave 是否正常
消息通知
redis实例挂了,那么哨兵负责发送消息给管理员
故障转移
master挂了,slave自动顶上
配置中心
故障转移后,通知client 客户端新的master