这是我参与「第五届青训营 」伴学笔记创作活动的第 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是什么?
1、String数据value字节数据大于10KB的
2、Hash、Set、Zset、List等复杂数据结构类型,元素个数大于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、使用缓存集群
今天学习就到这里,晚安!