这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
一、目录
本节课主要分为三个部分:
1.Redis基本工作原理
2.Redis应用案例
3.使用Redis的注意事项
二、Redis基本工作原理
需要Redis的原因
数据从单库演进出了分库分表,MySQL从单机演进到了集群,数据量增长,读写数据的压力增加。
热数据为经常被访问的数据,存储到内存中,加快读取速度。
Redis实现数据持久化的原理:AOF/RDB
增量数据保存到AOF文件。
全量数据保存到RDB文件。
三、Redis应用案例
连续签到
key:用户id
value:连续签到天数
expireAt:设置过期时间为后天0点,实现如果第二天没有签到就过期的功能
String
存储字符串、数字、二进制数据等。
与expire配合使用。
消息通知
用list作为消息队列。
数据结构:quicklist(双向链表加listpack)
计数
用户的计数需求可通过hash结构存储。
数据结构:dict(渐进式rehash)
排行榜
实现积分变化时排名实时变更。
zest:是一个set(保存了内部value值的唯一性),其次给每个value添加了一个score属性,通过对分值的排序实现了有序化。
数据结构:zskiplist(跳表)
限流
要求1s内放行的请求为N,超过N就禁止访问。
对key(limit值)调用incr,超过限制N则禁止访问。
分布式锁
利用特性:
1.Redis为单线程执行命令。
2.setnx只有未设置过才能执行成功。
并发场景中要求一次只能有一个协程执行,可使用Redis的setnx实现。
四、使用Redis的注意事项
大Key、热Key
大Key
定义:字节数大于一定值。
措施:
1.读取成本高。
2.容易导致慢查询。
3.主从复制异常,服务阻塞,无法正常响应请求。
热Key
定义:访问这个Key的QPS较高。
措施:
1.设置Localcache。
2.将一个热Key复制写入多份,更新时需要更新多个Key。
避免慢查询场景
缓存穿透和缓存雪崩
缓存穿透
定义:热点数据查询绕过缓存,直接查询数据库。
措施:
1.缓存空值。
2.bloom filter算法。
缓存雪崩
定义:大量缓存同时过期。
措施:
1.缓存空值。
2.使用缓存集群,避免单机宕机造成的缓存雪崩。