redis知识归纳

Redis有哪些数据结构?

String、Hash、List、Set、SortedSet,还有HyperLoglog,Geo,Pub/Sub。

有大量key需要设置同一时间过期,需要注意什么?

会引发的问题:
大量的key过期时间设置过于集中时,过期时间点一到,redis可能会出现短暂的卡顿。严重情况下会出现缓存雪崩。

怎么解决:
一般在时间上加一个随机值,使过期时间分散些。

造成缓存雪崩的说明:
——场景:电商首页经常使用定时任务刷新缓存。
——特殊情况下:可能大量数据失效时间特别集中,如果在失效时间点涌入大量用户,就有可能造成缓存雪崩。

Redis分布式锁怎么回事?

先用setnx来争抢锁,抢到后,用expire给锁加一个过期时间来防止忘记释放锁。
——特殊情况下:setnx执行之后,还没用expire之前,进程意外crash或者重启维护了会导致这个锁永远得不到释放。
——建议:set指令有非常复杂的参数,可以同时把setnx和expire合成一条指令。

假设Redis里有1亿个key,其中有10万个key是以同一个固定前缀开头,如何将它们全部找出?

使用keys指令可以扫出指定模式的key列表。
——特殊情况下:如果这个Redis正在给线上的业务提供服务。由于Redis是单线程的特性,keys指令会导致线程阻塞一段时间。线上服务会停顿,直到keys指令执行完毕,服务才能恢复。
——建议:使用scan指令,scan指令是可以无阻塞的提取出指定模式的key列表。但是会有一定的重复概率,需要在客户端做一次去重。但是整体花费时间会比keys指令长。

如何用Redis做异步队列?

一般使用list结构作为队列,rpush生产消息,lpop消费消息。
——特殊情况下:当lpop没有消息的时候。
——建议:要适当sleep一会再重试,或者使用blpop阻塞住直到有消息到来。
——能不能生产一次消费多次?使用pub/sub主题订阅者模式,可以实现1:N的消息队列。

Redis是如何持久化的?

RDB做镜像全量持久化,AOF做增量持久化。
在redis重启实例时,会使用RDB持久化文件,重新构建内存,再使用AOF重放近期的操作指令,来实现完整恢复到重启前状态。
可以把RDB理解为一整个表全量的数据,AOF理解为每次操纵的日志。
——特殊情况下:机器掉电数据会怎么样?取决于AOF日志sync属性的配置。
——建议:不要求性能情况下,每条写指令时都sync一下磁盘,就不会丢失数据;高性能要求下,一般使用定时sync,比如1秒一次,这时候最多丢失1秒的数据。

参考来源:掘金-敖丙-redis基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值