Redis11问
https://blog.csdn.net/qq_31960623/article/details/116427752
1 基本数据类型
- String
- list
- hash
- set
- zset
2 redis为什么块
- 内存操作
- 优化过的数据结构
- 单线程无上下文切换
- 基于非阻塞的IO多路复用
3 redis6.0为什么改为多线程
redis使用多线程并不是放弃单线程 还是单线程模型处理客户端请求 多线程处理数据的读写和协议的解析 执行命令还是单线程;
这样做的目的 redis的瓶颈时在IO而不是CPU 使用多线程提升IO
4 热key解决方案
- 提前将热key打撒到不同的服务器
- 加入二级缓存 走内存查询
5 缓存击穿 穿透 雪崩
-
击穿 单key并发访问过万 过期导致请求DB
- 对key加锁更新
- 异步刷新过期时间
-
穿透 查询不存在的值
- key对应null值
- 布隆过滤器 为0一定不存在; 存在的会误判雪崩
-
雪崩 多key失效 请求到DB
- key不同失效时间
- DB限流
- 二级缓存 同热key
6 redis过期策略
- 惰性删除 key查询对key检测 key过期?删除
- 定期删除 随机取key检查
7 惰性+定期没有删除过期key怎么办?
走到redis内存淘汰机制 已设置过期=定期
- volatile-lru: 定期key中 删除最近最少使用
- volatile-ttl: 定期key中 移除将要过期key
- volatile-random: 定期key中 随机
- allkeys-lru
- allkeys-random
- noeviction: 内存达到阈值 写入报错