学习大厂如何使用redis | 青训营笔记

60 阅读3分钟

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

为什么需要Redis?
数据量增长,读写压力增加,需要对数据分冷热,将热数据存储到内存中。
redis工作原理:
1、数据从内存中读写
2、数据保存到硬盘上防止重启数据丢失
3、单线程处理所有操作命令
redis有哪些实际应用案例?

1、连续签到

用户每日有一次签到机会,断签则连续签到计数归0,签到必须在每天的23:59:59前签到。

2、消息通知

当文章更新时,将更新后的文章推送到ES,用户就能搜索到最新的文章数据。

3、计数

一个用户有多个计数需求,比如用户关注,点赞,评论,播放,阅读等等。

4、排行榜

一般游戏开发用得比较多,比如各种排行榜,积分,战力,段位等等。

5、限流

高频次,流量激增,访问异常等可以通过限流来解决。

6、分布式锁

并发场景,一次只能有一个协程执行。
redis的常用数据类型有哪些?

String、List、Hash、Set、Zset

大Key是什么?
1String数据value字节数据大于10KB的
2HashSetZsetList等复杂数据结构类型,元素个数大于5000个或总value字节数大于10MB
大Key有那些危害?
1、读取成本高
2、容易导致码查询(过期、删除)
3、主从复制异常,服务阻塞,导致无法正常响应请求
如何消除大Key?
 1、拆分,将大key拆分为小key
 2、压缩,将value压缩后写入redis,读取时解压后再使用
 3、复杂数据类型,可以用hash取余、位掩码的方式决定放在哪个key中,对数据进行冷热区分,例如榜单列表场景使用zset,只缓存前10也数据,后续的数据走db。
 
热Key是什么?
key没有明确标准,一般QPS超过500就有可能被识别为热key
 
如何解决热key?
1、设置Localcache
2、拆分
3、使用Redis代理的热key承载能力
容易导致redis慢查询的操作有哪些?
1、 批量操作一次性传入过多的key或value,如mset、hmset、sadd、zadd等O(n)操作建议单批次不要超过100,超过100之后性能下降明显。
2、 zset大部分命令都是O(log(n),当大小超过5k,简单的zadd、zrem也可能导致慢查询
3、 操作的单个value过大,超过10KB。
4、对大key的delete/expire操作也可能导致慢查询,Redis4.0之前不支持异步删除unlink,大key删除会阻塞Redis。
什么是缓存穿透?
 热点数据查询绕过缓存,直接查询数据库
什么是缓存雪崩?
 大量缓存同时过期
如何减少缓存穿透?
 1、缓存空值
 2、布隆过滤器
 
如何避免缓存雪崩?
 1、缓存空值
 2、使用缓存集群
 

今天学习就到这里,晚安!