Redis
2022-01-24 18:01:54 16 举报
AI智能生成
redis 缓存相关面试知识点
作者其他创作
大纲/内容
Redis的单线程为什么这么快?
完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
纯C编码,数据结构是专门进行设计的,对数据操作也简单
采用单线程,避免了不必要的上下文切换和竞争条件
使用多路I/O复用模型,非阻塞I/O;
Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
数据结构与应用
string
SDS
list
3.2之前 ADList
3.2之后 quicklist
hash
dict
ziplist
set
intset
dict
zset
ziplist
skiplist
内部基础数据结构
SDS - 简单动态字符串
ADList - 双向链表
dict - 字典
intset - 整数集合
ziplist - 压缩表
quicklist - 快速列表(ADList + ziplist)
skiplist - 跳跃表
O(logN), 32 层索引,0.25 概率选中
双向链表 ,平均查找效率为O(logN),表头、表尾、表长、最高层数的复杂度均为O(1);
常见问题
缓存穿透(访问的大批量key都不在缓存中)
缓存设置默认值
短暂缓存空值
布隆过滤器
无效key业务上校验过滤
缓存雪崩(某一时刻大批量k/v失效)
热点数据不过期
定时刷新
将过期时间离散化-随机过期时间
增加互斥锁更新
服务本地做二级缓存
缓存击穿 (单个热点数据过期 大量请求到db)
热点数据不过期
定时刷新
增加互斥锁更新
业务逻辑检查更新
过期键删除策略- 惰性删除 + 定期删除
持久化
AOF
RDB
应用
可以用作数据库、缓存和消息中间件MQ。
计时器、计数器(浏览量) 设计
0 条评论
下一页