1. 程式人生 > >《【面試突擊】— Redis篇》--Redis都有哪些資料型別?分別在哪些場景下使用比較合適?

《【面試突擊】— Redis篇》--Redis都有哪些資料型別?分別在哪些場景下使用比較合適?

能堅持別人不能堅持的,才能擁有別人不能擁有的。
關注程式設計大道公眾號,讓我們一同堅持心中所想,一起成長!!

《【面試突擊】— Redis篇》--Redis都有哪些資料型別?分別在哪些場景下使用比較合適?

在這個系列裡,我會整理一些面試題與大家分享,幫助年後和我一樣想要在金三銀四準備跳槽的同學。我們一起鞏固、突擊面試官常問的一些面試題,加油!!

1、面試題

Redis都有哪些資料型別?分別適用於哪些場景?

2、面試官心理分析

除非是面試官看你的簡歷,感覺你就是一個工作3年以內的、比較初級的一個同學,可能對技術沒有很深入的研究,面試官才會問這類問題。

其實問這個問題主要就倆原因:

第一,看看你有沒有全面的瞭解redis的功能,一般怎麼來用。有沒有認真思考過什麼場景比較適合用什麼資料型別,就怕你只會最簡單的kv操作,平時也沒思考過怎麼設計才更好。

第二,看看你在實際專案裡都怎麼用Redis,是不是思考過Redis的這些資料型別,是不是愛學習的人。

要是你回答的不好,沒說出幾種資料型別,也沒說什麼場景,支支吾吾的你就完了,面試官對你印象肯定不好,覺得你平時就是做個簡單的set和get。

3、面試題剖析

看一下這道面試題怎麼回答。

(1)string

這是Redis中最基本的型別了,也最常用,沒啥可說的,就是普通的set和get,做簡單的kv快取。

(2)hash

這個是類似map的一種結構,一般可以將結構化的資料,比如一個物件(前提是這個物件沒巢狀其他的物件)給快取在redis裡,然後每次讀寫快取的時候,可以就操作hash裡的某個欄位,而不是把整個物件都拿出來,這樣節省了IO操作,效率更高。

使用HSET key field value命令儲存一個物件,如我們有一個使用者,
key=user:id:1

value={
  "id": 1,
  "name": "walking",
  "age": 24
}

hash類的資料結構,主要是用來存放一些物件,把一些簡單的物件給快取起來,後續操作的時候,你可以直接僅僅修改這個物件中的某個欄位的值。

value={
  "id": 1,
  "name": "walking",
  "age": 18
}

HGET user:id:1 age獲取使用者ID為1的age值。

(3)list

有序列表,這個是可以玩兒出很多花樣的。

比如在微博裡,有個大v的粉絲,就可以以list的格式放在Redis裡去快取。

key=某大v

value=[zhangsan, lisi, wangwu]

比如可以通過list儲存一些列表型的資料結構,類似粉絲列表了、文章的評論列表了之類的東西。

還可以通過lrange命令,從某個元素開始讀取多少個元素,還可以基於list實現分頁查詢,這個很棒的一個功能。基於redis實現簡單的高效能分頁,可以做類似微博那種下拉不斷分頁的東西,效能很高,一頁一頁的走。

比如還可以用來搞個簡單的訊息佇列,從list頭塞進去,從list尾巴那裡弄出來。

(4)set

set無序集合,可以自動去重。

直接基於set將系統裡需要去重的資料扔進去,自動就給去重了,如果你需要對一些資料進行快速的全域性去重,你當然也可以基於jvm記憶體裡的HashSet進行去重。但是如果你的某個系統部署在多臺機器上呢?就得基於Redis進行全域性的set去重了。

當然還可以基於set玩兒交集、並集、差集的操作,比如交集吧,可以把兩個人的粉絲列表整一個交集,看看倆人的共同好友是誰?對吧。

把兩個大v的粉絲都放在兩個set中,對兩個set做交集,看到共同關注的人。

(5)sorted set

排序的set,去重但是可以排序,寫進去的時候給一個分數,自動根據分數排序,這個可以玩兒很多的花樣。這個資料型別的最大的特點是有個分數的概念,可以自定義排序規則。

比如說你要是想根據時間對資料排序,那麼可以寫入進去的時候用某個時間作為分數,人家自動給你按照時間排序了。

另外,這個資料型別很適合最排行榜這類的功能。

排行榜: 將每個使用者以及其對應的分數寫入進去
命令zadd board score username

zadd board 85 Jobs
zadd board 72 Jerry
zadd board 96 Walking
zadd board 62 Tom
...

接著使用命令zrevrange board start stop,就可以獲取排名從start到stop的使用者。

使用命令zrank board username,可以看到使用者在排行榜裡的排名。

如:
zrevrange board 0 3獲取排名前3的使用者

96 Walking
85 Jobs
72 Jerry

檢視排名zrank board Tom
返回4

本系列文章在於面試突擊,不是教程,不是帶著你教你Redis的API的,在於突擊,快速拾遺,溫習。