redis用法|青训营笔记

75 阅读2分钟

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

为什么需要redis:随着数据量的增加,读写数据的压力越来越大,需要使用缓存来加快读写的速度。

redis如何持久化:在磁盘中有AOF文件和RDB文件,当重启redis的时候,从rdb中读取,并且根据AOF中没有执行的命令进行执行。

redis是顺序执行的,但形成操作所有的命令。

redis的基本数据类型:string、hash、list、set、sortedset。

可以使用redis实现限流:本质上就是利用string 类型的数据,每秒我们设定一个上限。一开始是0,来一个协程我们就加一,到了上限之后我们就限制一下协程。过了这秒之后数值置零,重新开始计数。

利用redis实现分布式锁:并发场景下,要求一次只能有一个协程执行,协程执行完之后,其他等待中的协程才能执行。可以使用redis的setnx命令,这主要利用了redis的两个特性,一个是redis是单线程执行命令,setnx只有未设置过才能设置成功。

这并不是高可用的分布式锁的实现:该实现存在的问题,业务超时解锁,导致并发问题,业务执行时间超过锁超时时间。redis主设备切换临界点问题,主备切换后,A持有的锁还未同步到新的主节点时,B可在新的主节点获取。redis集群脑裂,导致出现多个主节点。

redis中的大key和热key,大key的危害:读取成本高,容易导致慢查询,主从赋值异常,服务阻塞,无法正常响应请求。业务侧使用大key的表现,请求redis超时报错。

消除大key的方式:拆分,将大key拆分为小key,例如一个string拆分为多个string。压缩将value压缩后写入redis。

热key:高访问频率的key,解决的办法,设置localCache。

缓存穿透:热点数据查询绕过缓存,直接查询数据库。

缓存雪崩:大量缓存同时过期。

减少缓存穿透的方法:缓存空值、布隆过滤器

如何避免缓存雪崩:缓存空值、使用缓存集群,避免单机宕机造成阿缓存雪崩。