Redis-大厂程序员怎么用的(1) | 青训营笔记

42 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天,本文主要以概括总结,全局记录为主,而不是作为细致的知识点讲解,细节之处多有疏忽还望多多包容。

一、本堂课重点内容:

  • Redis 是什么
  • Redis 应用案例
  • Redis 使用注意事项

二、详细知识点介绍:

什么是 Redis

为什么需要 Redis

  • 因为数据它从单表,演进成了分库分表
  • MySQL 从单机演进出了集群
    • 因为随着数据量的增大
    • 读写数据压力的不断增加
什么是集群?

集群就是将多个 MySQL 以页表方式建成关系,可以有效地提升查询地速率

image.png


  • 数据分冷热

    • 热数据:经常被访问到的数据
  • 将热数据存储到内存中,方便快速操作

读: 先读 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 的方法
  1. 拆分
  2. 压缩
  3. 集合类结构 hash、list、set
热 Key 的定义

用户访问一个 Key 的 QPS 特别高,导致 Sever 实例出现 CPU 负载突增或者不均的情况。热 Key 没有明确的标准, QPS 超过 500 就有可能识别为 热 Key

解决热 Key 的方法
  1. 设置 Localcache
  2. 拆分
  3. 使用 Redis 代理的热 Key 承载能力

2. 慢查询场景

容易导致 Redis 慢查询的操作
  1. 批量操作一次性传入过多的 Key/value
  2. zset 大部分命令都是 O(log(n))
  3. 操作的单个value 过大
  4. 对大 key 的 delete / expire 操作,Redis 4.0 之前不支持异步删除 unlink,大 key 删除会阻塞 Redis

缓存穿透、缓存雪崩

  • 缓存穿透:热点数据查询绕过 缓存,直接查询数据库
  • 缓存雪崩:大量缓存同时过期
缓存穿透的危害
  1. 查询一个一定不存在的数据
  2. 缓存过期时,查询全部打到 DB 上,容易影响效率
如何减少缓存穿透
  1. 缓存空值
  2. 布隆过滤器
如何避免缓存雪崩

1.缓存空值 2. 使用缓存集群

三、课后个人总结:

  • Redis 凭借其优良的特性为 数据库 减轻了很多负担,运用场景十分广泛

四、引用参考: