Redis面試千萬千萬不能踩的坑

2022-08-10 02:36:24 字數 2061 閱讀 2170

很多文章都會說,redis支援5種常用的資料型別,這其實是存在很大的歧義。redis裡存的都是二進位制資料,其實就是位元組陣列(byte),這些位元組資料是沒有資料型別的,只有把它們按照合理的格式解碼後,可以變成乙個字串,整數或物件,此時才具有資料型別。

因此redis裡的string指的並不是字串,它其實表示的是一種最簡單的資料結構,即乙個key只能對應乙個value。這裡的key和value都是byte陣列,只不過key一般是由乙個字串轉換成的byte陣列,value則根據實際需要而定。

在特定情況下,對value也會有一些要求,比如要進行自增或自減操作,那value對應的byte陣列必須要能被解碼成乙個數字才行,否則會報錯。

那麼list這種資料結構,其實表示乙個key可以對應多個value,且value之間是有先後順序的,value值可以重複。

set這種資料結構,表示乙個key可以對應多個value,且value之間是沒有先後順序的,value值也不可以重複。

hash這種資料結構,表示乙個key可以對應多個key-value對,此時這些key-value對之間的先後順序一般意義不大,這是乙個按照名稱語義來訪問的資料結構,而非位置語義。

sorted set這種資料結構,表示乙個key可以對應多個value,value之間是有大小排序的,value值不可以重複。每個value都和乙個浮點數相關聯,該浮點數叫score。元素排序規則是:先按score排序,再按value排序。

相信現在你對這5種資料結構有了更清晰的認識,那它們的對應命令對你來說就是小case了。

除此之外,選擇單執行緒還有以下這些原因:

1、redis都是對記憶體的操作,速度極快(10w+qps)

2、整體的時間主要都是消耗在了網路的傳輸上

3、如果使用了多執行緒,則需要多執行緒同步,這樣實現起來會變的複雜

4、執行緒的加鎖時間甚至都超過了對記憶體操作的時間

5、多執行緒上下文頻繁的切換需要消耗更多的cpu時間

6、還有就是單執行緒天然支援原子操作,而且單執行緒的**寫起來更簡單

redis事務具有以下特點:

1、如果開始執行事務前出錯,則所有命令都不執行

2、一旦開始,則保證所有命令一次性按順序執行完而不被打斷

3、如果執行過程中遇到錯誤,會繼續執行下去,不會停止的

4、對於執行過程中遇到錯誤,是不會進行回滾的

看完這些,真想問一句話,你這能叫事務嗎?很顯然,這並不是我們通常認為的事務,因為它連原子性都保證不了。保證不了原子性是因為redis不支援回滾,不過它也給出了不支援的理由。

不支援回滾的理由:

1、redis認為,失敗都是由命令使用不當造成

2、redis這樣做,是為了保持內部實現簡單快速

3、redis還認為,回滾並不能解決所有問題

哈哈,這就是霸王條款,因此,好像使用redis事務的不太多

redis提供了一種管道技術,可以讓客戶端一次傳送多個命令,期間不需要等待伺服器端的響應,等所有的命令都發完了,再依次接收這些命令的全部響應。這就極大地節省了許多時間,提公升了效率。

聰明的你是不是意識到了另外乙個問題,多個命令就是多個key啊,這不就是上面提到的多key操作嘛,那麼問題來了,你如何保證這多個key都是同乙個節點上的啊,哈哈,redis集群又放棄了對管道的支援。

不過可以在客戶端模擬實現,就是使用多個連線往多個節點同時傳送命令,然後等待所有的節點都返回了響應,再把它們按照傳送命令的順序整理好,返回給使用者**。哎呀,好麻煩呀。

簡單了解下redis的協議,知道redis的資料傳輸格式。

傳送請求的協議:

例如,set name lixinjie,實際傳送的資料是:

*3\r\n$3\r\nset\r\n$4\r\nname\r\n$8\r\nlixinjie\r\n

接受響應的協議

例如,+ok\r\n

-err operation against\r\n

:1000\r\n

$6\r\nfoobar\r\n

*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n

可見redis的協議設計的非常簡單。

面試的時候千萬不能 得意忘形

今天去一家軟體公司面試,面試的可能是兩位主管.整個過程談的都還好 我介紹了我所做過的專案,採用的技術,目前主要負責的工作情況等等.期間他們也會問到一些技術性的問題,但是概念上的,比如三層架構,敏捷開發等,我估計他們也不是很懂.後來,看到我簡歷上說我的六級過了,就問我的英語水平現在怎麼樣?這個時候我已...

python Pandas裡千萬不能做的5件事

作為乙個在進入資料分析領域之前幹過開發的攻城獅,我看到我的同行以及新手在使用 pandas 時會犯很多低階錯誤。今天我說出這五個坑,讓大家別一而再,再而三的掉坑里。修復這些錯誤能讓你的 邏輯更清晰,更易讀,而且把電腦記憶體用到極致。這不能說是誰的錯,因為在 pandas 中獲取和設定值的方法實在太多...

程式設計師千萬不能養成的習慣

不吃早餐。指控 嚴重傷胃,使你無法精力充沛地工作,而且還容易 顯老 德國埃朗根大學研究人員在對7000個男女物件的長期跟蹤後發現,習慣不吃早餐的人佔到了40 而他們的壽命比其餘60 的人平均縮短了2.5歲。而另一所大學在一次對80 90歲老年人的研究中發現,他們長壽的共同點之一是 每天吃一頓豐盛的早...