Redis | 青训营笔记

89 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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.使用缓存集群,避免单机宕机造成的缓存雪崩。