数据结构论坛

首页 » 分类 » 分类 » 互联网公司Redis面试题串讲难度中等
TUhjnbcbe - 2023/6/19 20:53:00
北京专业的白癜风医院 https://wapyyk.39.net/bj/zhuanke/89ac7.html

引子:大家好,redis作为一个最常用的nosql存储,工作中几乎离不开。不过通常我们也仅仅是会用,对于原理不甚了解,对于底层特性也模棱两可。而通常在后端开发程序员面试中,redis是出现频率很高的一个话题。本文结合一次模拟面试流程,串讲几个常见的redis知识点。

小编友情建议,面试简历上不要随随便便写精通Redis

首先第一问:Redis有哪些数据结构?(难度:简单)

答:字符串string,字典hash,列表list,集合set,有序集合SortedSet

如果对redis有更深入了解,加上HyperLogLog,Geo,Pub/Sub

另外,可以加上Redis的BloomFilter(布隆过滤器),Bit操作,Lua脚本等等。

小编注:除了5种基本类型,剩下的类型当然是说的越多越好,但是注意,前提是你真的用过,因为面试官可能眼前一亮,然后往深了问。这时候如果答不上来就尴尬了。

如果能点到即止说下实现,那就更好了

然后第二问:Redis里面有海量的key,比如有w,此时我想根据一定词缀匹配所有符合的key,如果操作?(难度:中等)

答:使用keys命令,keys命令可以扫描出指定词缀的key列表。

接着可能会追问:请问这么做有没有什么风险?你真的这样操作过么?

答:由于redis是单线程的,keys指令的时间复杂度是O(n),常常会阻塞整个redis一段时间,所有其他操作都会被阻塞住。特备是w个key,阻塞时间会很长,

这是无法接受的。通常dba不允许keys命令操作,如果非要检索,可以使用scan命令代替。

scan命令可以使用内置游标快速返回一批指定key,但是有重复,并且需要操作许多次,去重通常用客户端来实现。

面试官这里相比已经对你点头了,如果深究,还会再问一句:如果检索的是hash中的field,set或者zset中的member,如何实现?

答:分别使用hscan,sscan,zscan

小编注:keys和scan命令其实算是常见操作了,通常keys等时间复杂度为O(n)的命令dba是明确禁止的,不要掉进面试官的坑中。

接着第三问:redis中的事务是如何实现的?如何简单使用redis当作分布式锁?(难度:中等偏上)

答:使用setnx命令抢锁,再用expire命令给锁加超时时间,防止锁没有被释放。

接着会问:对于其他的事务操作,redis如何实现?

答:redis的事务并不是典型的acid事务,redis的事务能力有限,建议使用redis+lua脚本实现。

由于redis单线程,将事务操作封装在一个lua脚本中,redis能保证执行这一个lua脚本中的操作都在一个事务中。

lua脚小编注:本是redis的高级特性,答出来能体现对redis的掌握程度比较扎实。

lua脚本用途诸多,值得一学

然后第四问:如果查看一个key是否过期,以及如果有大量的key在同一时刻过期,应该怎么做?

答:ttl命令;如果有大量key同时过期,可能会导致redis的短暂卡顿。通常生产环境,我们利用业务特性,尽量使得redis错峰过期。如果实在有大量key需要同时过期,

建议设置一定的随机时间范围。比如:原来可能是在17:00准时过期,可以再前后的10s内,打散过期时间。

小编注:这里实际上是一个经验问题,体现一个开发人员的项目经验。

最后面试官可能会问一个开放性问题:你的xx项目中如何使用redis的?(难度:高)

小编注:这其实是一个很开放的问题。越是这样的问题越难以回答,建议按照实际情况,选择自己最有把握的回答。有经验的面试官会抓住一点内容不放,层层深入。

以下只是举例,更多的问题会后续放上来:

模拟答案:我使用redis作为缓存。xx项目redis作为缓存,在读数据库之前先尝试读redis。

面试官:什么时候不适合用缓存?答:考虑缓存命中率/数据需要安全持久化等情况

面试官:缓存突然失效会造成什么?答:数据库会被“击穿”

面试官:缓存的结构是什么?答:根据业务,既有灵活运用各种结构的设计过的redis,也有被动存储整条sql的redis

面试官:大量的数据需要操作,如何提升效率?答:使用mget,hmge等批量命令;灵活使用pipeline

面试官:除了单机redis,你还了解或用过什么?答:redis官方有sentinel,cluster;开源界有tweproxy,codis;业界的方案,如新浪微博,,腾讯等公司,有自研的pika/tendis等等。

好了,本次针对redis的面试告一段落。是不是一些概念连听也没有听过呢?

今天分享了一串redis的问题,仅仅是redis问题的一部分;很多问题没有深入。

其实在互联网公司,以上问题仅仅算是常见问题。

没有听过也不要担心,接下来会分批陆续放上一些BAT等大厂常见面试题,敬请期待。

欢迎点赞,评论,转发。您的支持是我码字的最大动力,比心~~

比心~

1
查看完整版本: 互联网公司Redis面试题串讲难度中等