破玩意儿
有哪些特性
高性能,作为缓存组件读写速度都很快
支持各种复杂的数据类型(string[bitmap,geo...],list,set,zset,hash)
支持事务(multi...exec)
支持持久化(aof,rdb,aof+rdb[v4.0+])
高可用特性(主从复制,哨兵,集群)
订阅通知机制和消息队列,stream(v5.0+)
为啥辣么快
缓存读写是纯内存操作,没有磁盘io的限制
单线程数据读写,避免了多线程切换和数据竞态引发的锁
非阻塞的io多路复用模型(reactor)
底层数据结构优化的好(比如sds,成功的将长度的复杂度降到O(1))
列举你知道的redis常用的场景
请睁大眼睛看对面
redis6为啥改用多线程
别胡扯,那就是各种上下文处理用多线程,数据的存取还是单线程
内存不足的时候有啥淘汰机制
volatile_lru:设置过过期时间的key里面最少使用的
allkeys_lru:所有key里面最少使用的
volatile_ttl:快要过期的key
还有很多,不说了,我用的是allkeys_lru
redis如何保证高可用
主从复制+哨兵 || 集群+主从
如果整个redis都挂,那就查数据库吧(为啥觉得redis会挂mysql不会挂呢?)
如何进行持久化的
aof
默认不开启,需要改配置
所有的命令都会写aof缓冲区,一般一秒刷一次盘
为了避免aof文件过大,会有一个重写机制,可以配置触发条件
rdb
就是所有的内存缓存数据二进制文件,经过redis压缩过的,会比数据本身都小
可以自己配置啥时候进行rdb备份(save)
如果同时开启了aof和rdb,启动会加载aof,但是rdb的加载更快
主从同步的话,如果是全量同步,master会整一个rdb发送给slave
aof+rdb
v4.0后新增的持久化机制,需要开启aof,且开启aof+rdb(都是配置)
重写aof的时候先整一个rdb,然后和子进程搞rdb期间的命令以aof的方式搞到一起
几个被问烂的问题
缓存击穿
集中失效(同时过期)强调“击穿点(过期时间)”
缓存穿透
db&redis 均没有,强调钻空子绕过你
大key
顾名思义就是key存储的缓存数据很大,比如一个list有几十万的size
优雅删除大key
性能调优
查看慢日志 slowlog get {n}
查看bigkey
集中过期
有可能是bgsave或者aofrewrite