摆烂新人写文章Day16——Redis

85 阅读2分钟

什么是Redis

为什么需要Redis?

  • 数据从单表,演进出了分库分表
  • Mysql从单机演进出了集群
    • 数据量增长
    • 读写数据压力的不断增加

image.png

  • 数据分冷热
    • 热数据:经常被访问到的数据
  • 将数据存储到内存到

image.png

Redis基本工作原理

  • 数据从内存中读写
  • 数据保存到硬盘上防止重启数据丢失
    • 增量数据保存到AOF文件
  • 单线程处理是由操作命令

image.png

String数据结构

数据结构——sds

  • 可以存储 字符串、数组、二进制数据
  • 通常和expire配合使用
  • 场景:存储计数、Session

image.png

Redis使用注意事项

1. 大Key、热Key

大Key的定义

image.png

大Key的危害

  • 读取成本高
  • 容易导致查询(过期、删除)
  • 主从复制异常、服务阻塞无法正常响应请求

业务请求使用大Key的表现

  • 请求Redis超时报错

image.png

解决方法:

  1. 拆分

将大Key拆分为小Key,例如一个String分成多个String

image.png

2.压缩

将value压缩写入Redis,读取时解压后再使用。压缩算法可以是gzip、snappy、lz4等。通常情况下,一个压缩算法压缩率高,则解压耗时就长,需要对实际数据进行测试后,选择一个合适的算法。 如果存储的是JSON字符串,可以考虑使用MessagePock进行列化。

image.png

热Key的定义

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

image.png

解决Key的方法

  1. 设置Localcache

在访问Redis前,在业务服务侧设置Localcate,降低访问Redis的QPS。LocalCache中缓存过期或未命中, 则从Redis中将数据更新到LocalCache。

image.png

2.拆分 将Key:value这一个热Key复制写入多份。代价是更新需要多个Key,存在数据短暂不一致的风险

image.png

3.Redis代理的热Key承载能力 字节跳动的Reis访问代理就具备Key承载能力,本质上是结合了热Key发现、LocalCache两个功能

image.png

2. 慢查询场景

容易导致Redis慢查询的操作

image.png

3.缓存穿透、缓存雪崩

image.png

image.png