Redis八股文背诵版


首先自我介绍一下,我是小牛, 微软 程序员一枚,2021 春招 热热闹闹开始了,我和阿里, 字节跳动 的老哥们翻出了自个压箱底的背诵版八股文,希望对大家有所帮助。
背之前先来看看阿里巴巴的常问计算机网络你们会几个
网站interviewtop.top,汇总各大厂八股文面试题

Redis单线程原理

首先必须明确,Redis单线程指的是网络请求模块使用了一个线程(,其他模块仍用了多个线程。并不是一个线程完成了所有功能。原理上,其采用了利用epoll的多路复用特性,因此可以采用单线程处理其网络请求。

Redis数据类型

String:字符串类型,最简单的类型 Hash:类似于Map的一种结构。List:有序列表。Set:无序集合。ZSet:带权值的无序集合,即每个ZSet元素还另有一个数字代表权值,集合通过权值进行排序。

什么情况下使用redis

  1. 针对热点数据进行缓存
  2. 对于特定限时数据的存放
  3. 针对带热点权值数据的排序list
  4. 分布式锁

redis与memcache的区别

  1. redis处理网络请求采用单线程模型,而memcache采用多线程异步IO的方式
  2. redis支持数据持久化,memcache不支持
  3. redis支持的数据格式比memcache更多

简述缓存穿透

缓存穿透指缓存和数据库均没有需要查询的数据,攻击者不断发送这种请求,使数据库压力过大。

简述缓存穿透的解决方法

  1. 在数据库操作访问前进行校验,对不合法请求直接返回。
  2. 对于经常被访问的,并且数据库没有的键,缓存层记录键=null。

简述缓存击穿

缓存击穿指缓存中没有数据,但数据库中有该数据。一般这种情况指特定数据的缓存时间到期,但由于并发用户访问该数据特别多,因此去数据库去取数据,引起数据库访问压力过大

简述缓存穿透的解决方法

  1. 设置热点数据永远不过期。
  2. 对并发读数据设置并发锁,降低并发性

简述缓存雪崩

缓存雪崩指缓存中一大批数据到过期时间,而从缓存中删除。但该批数据查询数据量巨大,查询全部走数据库,造成数据库压力过大。

简述缓存雪崩的解决方法

  1. 缓存数据设置随机过期时间,防止同一时间大量数据过期。
  2. 设置热点数据永远不过期。
  3. 对于集群部署的情况,将热点数据均与分布在不同缓存中。

Redis有哪些集群部署方式

  1. 主从复制
  2. 哨兵模式
  3. Cluster集群模式

简述主从复制模式

在主从复制中,有主库(Master)节点和从库(Slave)节点两个角色。从节点服务启动会连接主库,并向主库发送SYNC命令。

主节点收到同步命令,启动持久化工作,工作执行完成后,主节点将传送整个数据库文件到从库,从节点接收到数据库文件数据之后将数据进行加载。此后,主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给从节点,从节点依次执行,从而达到最终的数据同步。

通过这种方式,可以使写操作作用于主库,而读操作作用于从库,从而达到读写分离。

简述哨兵模式

哨兵模式监控redis集群中Master的工作的状态。在Master主服务器宕机时,从slave中选择新机器当作master,保证系统高可用。

每个哨兵每10秒向主服务器,slave和其他哨兵发送ping。

客户端通过哨兵,由哨兵提供可供服务的redis master节点。

哨兵只需要配master节点,会自动寻找其对应的slave节点。

监控同一master节点的哨兵会自动互联,组成哨兵网络,当任一哨兵发现master连接不上,即开会投票,投票半数以上决定Master下线,并从slave节点中选取master节点。

cluster集群

cluster提出了虚拟槽的概念。

  1. redis cluster默认有16384个槽,在集群搭建的时候,需要给节点分配哈希槽尽可能相同数量虚拟槽。
  2. 如果目前redis执行set操作,redis先对这个key经过CRC16 hash运算,并把结果对16384取余,得到槽编号。
  3. 根据槽编号,寻找到其对应的redis节点,在节点上执行hash命令。
  4. 如果此时执行get操作,节点先验证该key对应的槽编号是不是归本节点管,如果是则保存数据。如果不是,则发送正确节点编号给客户端。

简述Redis的RDB

RDB即将当前数据生成快照,并保存于硬盘中。可以通过手动命令,也可以设置自动触发。

简述Redis的save命令

save命令是redis手动触发RDB过程的命令。使用该命令后,服务器阻塞,直到RDB过程完成后终止。该过程占用内存较多。

简述Redis的bgsave命令

bgsave命令不阻塞主进程(严格意义上也不是完全不阻塞,详看下面过程),该命令fork一个子进程用于执行RDB过程。其具体过程为:

  1. 判断此时有没有子进程用于RDB,有的话直接返回。
  2. redis进行fork子进程过程,此时父进程处于阻塞状态。
  3. 子进程创建RDB文件,完成后返回给父进程

简述Redis自动触发RDB机制

  1. 通过配置文件,设置一定时间后自动执行RDB
  2. 如采用主从复制过程,会自动执行RDB
  3. Redis执行shutdown时,在未开启AOF后会执行RDB

简述Redis的AOF

AOF通过日志,对数据的写入修改操作进行记录。这种持久化方式实时性更好。通过配置文件打开AOF。

简述AOF的持久化策略

  1. always。每执行一次数据修改命令就将其命令写入到磁盘日志文件上。
  2. everysec。每秒将命令写入到磁盘日志文件上。
  3. no。不主动设置,由操作系统决定什么时候写入到磁盘日志文件上。

简述AOF的重写

随着客户端不断进行操作,AOF对应的文件也越来越大。redis提供了bgrewriteaof函数,针对目前数据库中数据,在不读取原有AOF文件的基础上,重写了一个新的AOF文件,减少文件大小。

RDB与AOF优缺点比较

AOF占用的文件体积比RDB大。一般来说利用AOF备份对系统的消耗比RDB低。对于备份时出现系统故障,RDB数据可能会全丢,但AOF只会损失一部分。RDB恢复速度比AOF低。


#学习路径#
全部评论
简述缓存穿透的解决方法有两个呢,下边的是不是缓存击穿的解决方法?
点赞 回复 分享
发布于 2021-08-13 09:43
fork系统调用也能叫阻塞么.
点赞 回复 分享
发布于 2021-09-11 10:27

相关推荐

投票
求指导 wxg视频号(n-3)✕17 和字节巨量引擎(n+4)✕15,总包基本一样(如果wxg拿得满年终的话)- 💸薪酬:20%+的base差距可能要基本上要跳槽一次才能涨回来- 👩‍🌾团队/氛围:都没去过,不太清楚。和老板聊下来字节那边肯定是更年轻一些。不过两边老板都挺聊得来的- 🫵强度:应该都挺大的没得说,有双休感觉都还行- 🪜业务:视频号创作者端和巨量创意。感觉没法直接比较两个平台的价值。不知道会不会从长期五年跨度来看会好一点。视频号是pony全村的希望,ai是未来的方向。求懂的大佬给给建议- 🛠️技术:个人感觉字节技术应该好点。但是经过多方沟通反而觉得视频号这边技术落地更深一些- 🚗地域:一个广州一个北京,这个无所谓。主打一个全国可✈️- 👥团队人员:  视频号我这个组里人有点多,十多个,同样的相邻组里只有六个人,不知道会有什么间接影响不(背小星星什么的)  巨量那边组里六七个吧- 😍晋升:wxg听说晋升比较难,老人占比多,老人报团的。字节应该还可以比较好升- 🤔跳槽:wxg人员流动应该比字节要低一些。字节过去基本上就是准备三年合同到期或者更早就得跳槽了。wxg的话能待久一些,但是跳槽认不认股票这个还不清哎。背书的话感觉wxg会更好一点- 🛬landing:字节试用期是六个月,wxg试用期是三个月⛔️,差了三个月的话相对来说没有那么好过- 🆘卡点:  - wxg的背星风险和年总风险⚠️,看脉脉上说有新人背星的风险比较大,那对应年终也打折。尤其是我这个组是隔壁组两倍的人。另外多出来的年终一半现金一半是股票两年解禁,而且这两年过程中目前看跌,到手估计折价1/3‼️  - 另外我的组织架构是基础产品下的,也就是基础微信下面的。但是业务确实是视频号的。这个不知道会不会影响年终  - 巨量创意的发展,个人感觉这种aigc的东西没法直接拿来用,也不太好辅助创作吧。现阶段更多还是人工拍摄为主。aigc的数字人什么的远远不如人工来的效果好。顶多是打个样。也就是可有可无的感觉,要是巨量星图 算数什么的感觉都好挺多  - base高的话公积金也会稍微有一些,算上公积金的差异,三年均下来的年均还是字节能高出四个#哪个瞬间让你对大厂祛魅了?##秋招前后对offer的期望对比##第一份工作应该只看薪资吗##牛客AI配图神器#
点赞 评论 收藏
分享
评论
12
115
分享

创作者周榜

更多
牛客网
牛客企业服务