Redis面试复习笔记

redis属于单线程(工作线程只有一个,6.x高版本出现io多线程)

reids默认有16个库,默认使用0号库

redis使用了非阻塞式IO,使用epoll作为I/O多路复用

redis使用弱一致性,异步的同步。

reids主动自动切换 采用哨兵模式 新增是sentinel.conf 会从从服务器自动选择一个当主服务器,并让其他从服务器知道这台为新主服务器。

redis加锁incr setnx set

redis支持字符串(缓存)、列表(消息队列,数据列表等)、集合(共同特点数据)、哈希(存放对象)、有序集合(排序)

redis setnx如果KEY存在,则设置失败返回0,如果KEY不存在,则设置成功返回1。

redis multi 开启事务。watch 监听KEY是否发生变化,发生变化,则事务执行失败。exec 执行事务。

击穿、穿透、雪崩的场景:在上线要数据缓存预热,跟实际缓存预热的数据不一致时。

reids穿透:访问redis中一个不存在的key时候(redis和数据库都没有),导致无法命中,每次请求都穿透到数据库中进行查询,使数据库压力过大,甚至挂掉。

解决方案:缓存空对象,设置一个比较短的有效期时间。

redis击穿:在某个key过期的瞬间(redis没有,但数据库有),有大量的并发请求访问,这类数据一般为热点数据,由于缓存过期,会同时访问查询数据库最新的数据,并且回写缓存,会导致数据库瞬间压力过大。

解决方案:第一次时候加锁,执行完在释放锁或者设置热点数据永不过期。

redis雪崩:在某一段时间内集体缓存失效,所有查询集中到数据库上,对数据库CPU和内存造成极大的压力,导致数据库宕机。

解决方案:缓存时间随机或通过消息队列进行读写(避免db无效/重复请求)

redis的hash时间复杂度就0(1)。

AOF适合热备,RDB适合冷备。

重启redis会默认加载AOF数据,因为AOF的数据比RDB数据更全。

redis分布式锁: 使用setnx争抢锁,在用expire给锁加上一个过期时间防止忘记释放锁。发生在setnx之后执行expire前进程意外carch,需要把setnx和expire合并一条命令:set key value ex 10 nx;可以使用lua脚本执行命令是原子性。

redLock红锁:部署多个redis服务并独立运行,当一半redis服务加锁成功才算加锁成功。

redis分段锁:提示分布式锁的性能,就是把一个key拆分多个key把数据平分到多个key上。

redis布隆过滤器实现原理:当一个元素被加入集合时,通过N个散列函数(哈希)将这个元素映射成一个位数组中的N个点,把它们置为1,检索时,只要看这些点是不是都是1,大约就知道集合中有没有它了。任何一个为0,则一定不存在,则都是1,则被检元素很可能存在。

redis布隆过滤器缺点:一定的误判率和删除困难。

redis布隆过滤器优点:在空间和时间方面都有巨大优势,布隆过滤器存储空间和插入/查询时间都是常数(O(k))。不存在元素本身,保密要求非常严格的场合有优势。

redis过期键的删除策略:

1.惰性过期:只有访问一个key时,才会判断该key是否过期,过期则清除。(占用内存高,节省cpu)

2.定期过期:每间隔一定的时间,会扫描一定数据的数据库的expires字典一定数量的key,并清除其中已过期的key。

Redis淘汰Key的算法LRU与LFU区别:

1.lru淘汰很久没访问过的数据,以最近一次访问时间作为参考。

2.lfu淘汰最近一段时间被访问次数最少的数据,以次数作为参考。(热点缓存数据采用该策略)

redis底层存储数据结构:全局哈希表+链接表 hash(key) % size

redis有序集合存储方式默认是压缩列表,复杂度:O(N)。

reids有序集合存储方式跳表:按分值从小到大排序.就是由单链表上面建立一个索引层(近似折半查找算法),复杂度:O(logN)。需要到redis配置文件配置压缩列表最大个数,当超过最大个数则会使用跳表。

跳表:将有序链表改造为支持近似"折半查找"算法,可以快速的插入、删除、查找操作。

双重检测锁(DCL):先查询缓存,要缓存没数据,再加锁里面在执行一次查询缓存,要再没缓存数据则查询数据库。(可以解决热点瞬间并发量去查询数据库的问题)

redis两种持久化原理:

1.会fork子进程,子进程会将数据写入到磁盘一个临时rdb文件上,当子进程完成写临时文件后,将原来的rdb替换掉,好处是copy-on-witre,缺点业务量大时,丢失的数据会多。默认快照持久化(分为自动触发bgsave和手动触发,触发命令:save同步阻塞和bgsave异步)。主要用灾难恢复。

2.开启aof,然后每执行一个修改命令,都把他添加到aof文件时上,当redis重启时,就会读取aof文件进行"重放"以恢复到redis关闭前的时刻,全程持久化(可以开启AOF重写,在配置文件设置文件大小与文件大小增长百分比来触发)

3.混合持久:在AOF重写的时候,会把AOF文件里面数据转换成rdb二进制数据模式,再有新数据进来还是以AOF模式数据记录命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值