Reids | 青训营笔记

64 阅读3分钟

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

主要内容

这节课主要学习了Redis的相关知识,包括Redis是什么,redis的应用案例以及使用它的注意事项。

具体内容

基础知识

为什么要用Redis:mysql分库分表后,从单机变成集群后,访问速度变慢,需要加快访问速度。把数据分为冷热,热数据(经常访问的数据)存储到内存中。

Redis的基本工作原理:数据是直接从内存中读写,将数据通过AOF或者RDB文件保存到硬盘上防止数据丢失。RDB文件是保存了全部的信息,而AOF文件是保存了数据增量。

应用案例

使用场景

在限流、分布式锁、连续签到、消息通知、计数、排行榜等场景都会用到Redis。
连续签到中,使用到了Redis可以在现有基础上加一的能力和设置过期时间。
消息通知场景中,用到了list作消息队列(也可以用pub/sub)。 计数可以用hash结构。 排行榜会用到zset。 限流时会要求1s内放行的请求数。 分布式锁用到了redis的setnx,其之所以能够成立,是因为redis是单线程执行命令,且setnx只有未设置过才能执行成功。setnx并不能够完全保证高可用分布式锁。

数据结构

主要学习了String,list、hash、zset这几种常用的数据结构。 String数据结构可以存储字符串、数字、二进制数据等内容,并学习了redis中String的底层结构。 list叫Quicklist,是一个双向链表加上listpack实现。 hash结构学习了rehash。rehash时需要将原始hash表中的数据迁移到新的hash表中,这样当KV的数量很大时,迁移会导致阻塞。渐进式rehash把迁移时成本进行了均摊。 zset会用到zskiplist跳表,redis中zset是跳表+hash

使用注意事项

在使用redis时要多多注意。主要讲解了大key、热key、慢查询以及缓存穿透缓存雪崩这些容易出现的问题。

大key的定义:对string类型,value的字节数大于10KB;对其他复杂数据结构,元素个数大于5000或者value字节数大于10MB
大key的危害有读取成本高,容易导致慢查询,主从复制异常、网络拥塞等。 对于大key,可以通过拆分或者压缩的方式进行处理。

热key的定义:没有一个明确的标准,但是这个key的QPS很高。
对热key,可以设置Localcache,也可以进行拆分,即将一个热key复制成多份。

之后总结了一些会导致慢查询的操作,这些感觉需要注意。

最后又回顾了缓存穿透、缓存雪崩。对缓存穿透,可以采用缓存空值以及布隆过滤器进行处理,对缓存雪崩可以用缓存空值和使用缓存集群的方式。

总结

经过这节课,主要对redis进行了一个较为全面的了解,包括redis的用途,redis的数据结构,在几个典型使用场景中用到了redis的哪些功能,最后学习了使用redis的注意事项。学完这节课还是远远不够的,后面需要自己手动使用redis加深理解。