- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Redis面试题及答案
一、基础概念与数据结构
Redis和Memcached有什么区别?实际项目里怎么选?
答案:首先从支持的数据结构来看,Memcached只支持字符串,而Redis有string、hash、list、set、zset等多种结构,能应对更多场景,比如用zset做排行榜、hash存用户信息。然后是持久化,Memcached不支持持久化,Redis有RDB和AOF两种方式,要是数据不能丢,比如用户购物车数据,就选Redis。高可用方面,Memcached得靠集群工具实现高可用,Redis自带主从复制和哨兵,部署起来更方便。还有内存管理,Memcached用SlabAllocation,容易有内存碎片,Redis有多种内存淘汰策略,更灵活。实际选的话,简单的缓存场景,比如存首页热点数据,且不用持久化,Memcached够了;但要是需要复杂数据结构、持久化或高可用,就用Redis,现在大部分项目里Redis用得更多。
Redis常用的数据结构有哪些?分别举个实际应用场景。
答案:常用的有5种核心结构,各自场景很明确。string:适合存简单的键值对,比如存手机验证码(key是手机号,value是验证码,设过期时间)、商品库存(key是商品ID,value是库存数)。hash:适合存对象类数据,比如用户信息,key是用户ID,field是姓名、年龄、手机号,value是对应的值,比用多个string存更省内存,查询也方便。list:可以做消息队列(比如订单通知,生产者lpush往列表里加消息,消费者rpop取消息),还能做最新消息排行(比如显示最近10条评论,用lrange取前10条)。set:适合去重和交集、并集操作,比如用户标签去重(存每个用户的标签,避免重复),还有共同好友推荐(取两个用户set的交集)。zset:因为带分数排序,常用在排行榜场景,比如游戏积分排行(score是积分,value是用户ID,用zrevrange取前几名)、直播平台礼物榜。
Redis的zset为什么用跳表而不用红黑树?
答案:首先跳表的实现比红黑树简单,Redis作者为了降低代码复杂度选了跳表。然后从查询、插入、删除效率来看,跳表平均和最坏时间复杂度都是O(logn),和红黑树差不多,能满足需求。另外,跳表在批量操作时更有优势,比如zset要范围查询(比如取分数在100-200之间的元素),跳表可以直接通过层级定位,不用像红黑树那样遍历整个树,效率更高,这对排行榜这类需要频繁范围查询的场景很友好。
二、持久化机制
RDB和AOF两种持久化方式有什么区别?怎么选择?
答案:先看原理,RDB是每隔一段时间,把内存里的数据快照保存到磁盘(比如dump.rdb文件),AOF是把每一条写命令记录到日志文件(比如appendonly.aof),恢复时重新执行这些命令。再看优缺点,RDB的优点是文件小,恢复速度快,适合备份;缺点是快照间隔内的数据会丢,比如设5分钟快照一次,要是3分钟时Redis崩了,这3分钟的数据就没了。AOF的优点是数据安全性高,有三种刷盘策略(always、everysec、no),比如everysec每秒刷盘,最多丢1秒数据;缺点是文件大,恢复速度慢,还需要定期重写AOF文件来减小体积。选择的话,要是能接受一定数据丢失,追求恢复速度,比如做缓存的场景,用RDB就行;要是数据不能丢,比如金融交易数据,就用AOF,或者RDB+AOF混合用(Redis4.0后支持,先加载AOF恢复最新数据,再用RDB补全,兼顾速度和安全性)。
AOF的三种刷盘策略(fsync)有什么区别?实际项目用哪个?
答案:三种策略主要是刷盘时机不同。always:每执行一条写命令就调用fsync刷盘到磁盘,优点是数据绝对安全,缺点是每次都要IO操作,性能差,适合对数据安全性要求极高,不在乎性能的场景,比如银行核心数据,但实际很少用。everysec:每秒调用一次fsync,把缓冲区的命令刷到磁盘,优点是平衡了安全性和性能,最多丢1秒数据,缺点是极端情况下(比如服务器断电)可能丢1秒内的数据,实际项目里大部分场景都用这个,比如电商订单、用户信息存储。no:Redis不主动刷盘,由操作系统决定什么时候刷盘,优点是性能最好,缺点是数据安全性最差,操作系统崩溃可能丢大量数据,适合对数据安全性要求低,只做临时缓存的场景。
RDB持久化时会阻塞Redis吗?怎么优化?
答案:RDB持久化分两种方式,save命令和bgsave
您可能关注的文档
最近下载
- 少年中国说钢琴谱五线谱 完整版原版.pdf
- (2024年高考真题) 2024年新课标全国Ⅰ卷数学真题.docx VIP
- 小学六年级全册体育教案.doc VIP
- 2024年新华师大版数学七年级上册全册课件(新版教材).pptx
- 2025注安《安全生产法律法规》考前必背笔记.pdf VIP
- 2025年小学生软笔书法兴趣培养的研究[五篇] .pdf VIP
- 碳酸钠的性质与应用说课.pptx VIP
- 碳捕捉与封存(CCUS)在海洋工程领域的应用与挑战研究报告.docx
- 2023年月嫂资格证考试《母婴护理师、母婴保健师》知识题库(含答案).pdf VIP
- 航天飞机任务2007中文操作手册.pdf VIP
文档评论(0)