认识Redis (day12)| 青训营笔记

118 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第12天

image.png

本文基于字节青训营+上网自学的内容。

1.何为Redis

背景

1.数据从单表进化成了分库分表,MySQL从单机演进出集群(数据量和读写的压力与日俱增!)
2.数据分冷热(热数据:常被访问的数据。冷数据则相反)

三大特点使我们选择了Redis(同时这也是Redis的工作原理):

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

2.Redis使用注意事项

1.大key、热key:

大key
定义:对于string类型,value>10KB,对于复杂数据类型,元素数>5000or总字节数>10MB。
危害:读取成本高、导致慢查询(超过 long_query_time 参数设定的时间阈值)、主从复制异常,服务阻塞。 解决方法:拆分(一个string拆成多个string)压缩(value压缩后写入Redis)集合类结构可以拆分或区分冷热
热key
定义:访问QPS(每秒查询率)特别高 解决方法:设置localcash(降低访问率)拆分(一个热key复制写入多份,空间换时间)使用Redis代理的热key承载能力

2.慢查询场景

避免以下这些操作:
(1)批量操作一次性传入过多的key/value,如mset/hmset/sadd/zadd等O(n)操作建议单批次不要超过100,超过100之后性能下降明显。
(2)zset大部分命令都是O(log(n)),当大小超过5k以上时,简单的zadd/zrem也可能导致慢查询
(3)操作的单个value过大,超过10KB。也即,避免使用大Key
(4)对大tey的delete/expire操作也可能导致慢查询, Redis4.0之前不支持异步删除unlink,大key删除会阻塞Redis

3.缓存穿透和缓存雪崩

缓存穿透:热点数据查询绕过缓存,直接查询数据库
缓存雪崩:大量缓存同时过期
减少缓存穿透:
(1)缓存空值(则可以缓存一个空值,下次再查缓存直接反空值)
(2)布隆过滤器(通过bloom fiter算法来存储合法Key,得益于该算法超高的压缩率,只需占用极小的空间就能存储大量key值)
减少缓存雪崩:
(1)缓存空值(将缓存失效时间分散开)
(2)使用缓存集群,避免单机宕机造成的缓存雪崩。