这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天,本文主要以概括总结,全局记录为主,而不是作为细致的知识点讲解,细节之处多有疏忽还望多多包容。
一、本堂课重点内容:
- Redis 是什么
- Redis 应用案例
- Redis 使用注意事项
二、详细知识点介绍:
什么是 Redis
为什么需要 Redis
- 因为数据它从单表,演进成了分库分表
- MySQL 从单机演进出了集群
- 因为随着数据量的增大
- 读写数据压力的不断增加
什么是集群?
集群就是将多个 MySQL 以页表方式建成关系,可以有效地提升查询地速率
-
数据分冷热
- 热数据:经常被访问到的数据
-
将热数据存储到内存中,方便快速操作
读: 先读 Redis ,如果 Redis 读不到,再去 MySQL 集群中
写:先写入 MySQL 中,再监听 binlog,修改 Redis
Redis 基本工作原理
- 数据从内存中读写
- 数据保存到硬盘上防止重启数据丢失
- 单线程处理所有命令
Redis 使用注意事项
1.大 Key、热 Key
什么是大 Key
- String:value 的字节数大于 10 KB 的即为大 Key
- 复杂的数据结构类型: 元素的个数大于 5000 个或总 value 字节数大于 10MB 即为大 Key
大 Key 的危害
- 读取成本高
- 容易导致慢查询(过期,删除)
- 主从复制异常,服务阻塞,无法正常回应请求
业务侧使用大 Key 的危害: 请求 Redis 超时报错
消除大 Key 的方法
- 拆分
- 压缩
- 集合类结构 hash、list、set
热 Key 的定义
用户访问一个 Key 的 QPS 特别高,导致 Sever 实例出现 CPU 负载突增或者不均的情况。热 Key 没有明确的标准, QPS 超过 500 就有可能识别为 热 Key
解决热 Key 的方法
- 设置 Localcache
- 拆分
- 使用 Redis 代理的热 Key 承载能力
2. 慢查询场景
容易导致 Redis 慢查询的操作
- 批量操作一次性传入过多的 Key/value
- zset 大部分命令都是 O(log(n))
- 操作的单个value 过大
- 对大 key 的 delete / expire 操作,Redis 4.0 之前不支持异步删除 unlink,大 key 删除会阻塞 Redis
缓存穿透、缓存雪崩
- 缓存穿透:热点数据查询绕过 缓存,直接查询数据库
- 缓存雪崩:大量缓存同时过期
缓存穿透的危害
- 查询一个一定不存在的数据
- 缓存过期时,查询全部打到 DB 上,容易影响效率
如何减少缓存穿透
- 缓存空值
- 布隆过滤器
如何避免缓存雪崩
1.缓存空值 2. 使用缓存集群
三、课后个人总结:
- Redis 凭借其优良的特性为 数据库 减轻了很多负担,运用场景十分广泛