來自:程式設計新說
事出有因
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是如何處理資料不在本節點這樣情況的呢?)
我:好吧,這個問題你可以回去想想。
(明明就是井底之蛙,非要擺出一副自己看到了宇宙邊緣的樣子。)
朋友會在“發現-看一看”看到你“在看”的內容