欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【面试】我是如何在面试别人Redis相关知识时“软怼”他的

程序员文章站 2022-07-11 21:16:43
事出有因 Redis是一个分布式NoSQL数据库,因其数据都存储在内存中,所以访问速度极快,因此几乎所有公司都拿它做缓存使用,所以Redis常被称为分布式缓存。一次我的一个同事让我帮他看Redis相关的问题,我看到了他使用了Hash数据类型,其实它就对应Java里的Map。同事要往里存十几个key/ ......


事出有因



redis是一个分布式nosql数据库,因其数据都存储在内存中,所以访问速度极快,因此几乎所有公司都拿它做缓存使用,所以redis常被称为分布式缓存。

一次我的一个同事让我帮他看redis相关的问题,我看到了他使用了hash数据类型,其实它就对应java里的map。同事要往里存十几个key/value对,于是他就像使用本地map一样,连续的调用了十几次的put操作。

哎,我只好心理默默的想着,以后再招聘时,一定要加强redis的考察力度。


记一次面试



我:redis想在都成了标配了,几乎每个写代码的人都用过,那你说说redis的全名是什么?

他:redis不就是它的全名吗?其实会用不就行了嘛,我不关注这些。

(我心里真想一脚把他踹飞,你不会还有理了咋地,不过一向“有内涵”的我,这次要好好地“软怼”他。

我:哦,没关系,其实好多人都不知道它的全名。redis有一种数据类型叫做string,即字符串。java里也有个数据类型叫string,它们一样吗?

他:应该一样吧,我平时写java代码都是直接把一个string类型给存进去的。

(redis是个中间件,用c语言写的,和java没有关系的。

我:是吗?其实除了java外还有很多语言可以操作它,比如python。当然也可以把一个python里的string存储到redis里,这没有问题吧。

他:是的,没有问题。

我:那你说redis里的string到底是对应java里的string,还是python里的string呢?

他:这个。

(哈哈,小样,让你逞能,现在不nb了吧)

我:哦,没关系,其实好多人都不知道它到底是哪个语言里的string。

(其实redis里的string压根就不是个字符串,那它是个什么呢?

我:redis里有个数据类型hash,你用过吧。

他:用过,和java里的map很像。

我:如果往hash里存一个key/value,你怎么做?

他:就像map一样,调用put方法把key/value存进去就行了。

我:那存10对key/value呢?

他:调用10次put方法不就行了嘛。

(瞧他得瑟那样吧)

我:那要存100对,难道就调用100次put吗?

他:这个。

我:哦,没关系,不是每个人都会去思考这些问题的。

(我还真见过有人连续调用几乎二十次的,那么为什么不能这样做呢?

我:redis支持事务吗?

他:支持啊。

我:那你说说redis事务是什么样子的?

他:就是多条命令,要么都执行,要么都不执行。

(哎呦,可以呀,竟然回答对了。拜托,任何事务都是这样的好不好,原子性嘛)

我:假如我要执行3条命令,执行到第2条时出现了错误,那事务会回滚吗?

他:肯定会呀,不然还叫事务干嘛。

(哎呦呦,又nb起来了)

我:是吗?are you 确定?

他:这个。

我:哦,没关系,一般情况下也不会有人去使用redis的事务。

(redis的事务命令是“真的事务”吗?出现错误时会回滚吗?

我:如果redis是单节点,向它发送命令总能获取到数据。如果redis是集群,会有很多节点,如果向a节点发送命令,发现数据不在a上而在b节点上,此时会怎么样?

他:redis应该负责返回我请求的数据,既然我向a发的命令就应该由a负责。

我:是吗?你的意思是要a去b上帮你取数据吗?

他:难道不是吗?

(redis是如何处理数据不在本节点这样情况的呢?

我:好吧,这个问题你可以回去想想。

(明明就是井底之蛙,非要摆出一副自己看到了宇宙边缘的样子。


(end)


作者是工作超过10年的码农,现在任架构师。喜欢研究技术,崇尚简单快乐。追求以通俗易懂的语言解说技术,希望所有的读者都能看懂并记住。下面是公众号和知识星球的二维码,欢迎关注!

 

【面试】我是如何在面试别人Redis相关知识时“软怼”他的       【面试】我是如何在面试别人Redis相关知识时“软怼”他的