溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis數(shù)據(jù)類型和適用場景有哪些

發(fā)布時間:2021-12-20 11:21:48 來源:億速云 閱讀:115 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹Redis數(shù)據(jù)類型和適用場景有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!


 

1、面試題

Redis都有哪些數(shù)據(jù)類型?分別適用于哪些場景?

 

2、面試官心理分析

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

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

第一,看看你有沒有全面的了解redis的功能,一般怎么來用。有沒有認真思考過什么場景比較適合用什么數(shù)據(jù)類型,就怕你只會最簡單的kv操作,平時也沒思考過怎么設計才更好。

第二,看看你在實際項目里都怎么用Redis,是不是思考過Redis的這些數(shù)據(jù)類型,是不是愛學習的人。

要是你回答的不好,沒說出幾種數(shù)據(jù)類型,也沒說什么場景,支支吾吾的你就完了,面試官對你印象肯定不好,覺得你平時就是做個簡單的set和get。

 

3、面試題剖析

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


   

(1)string

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



   

(2)hash

這個是類似map的一種結(jié)構(gòu),一般可以將結(jié)構(gòu)化的數(shù)據(jù),比如一個對象(前提是這個對象沒嵌套其他的對象)給緩存在redis里,然后每次讀寫緩存的時候,可以就操作hash里的某個字段,而不是把整個對象都拿出來,這樣節(jié)省了IO操作,效率更高。

使用HSET key field value命令存儲一個對象,如我們有一個用戶,
key=user:id:1

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

hash類的數(shù)據(jù)結(jié)構(gòu),主要是用來存放一些對象,把一些簡單的對象給緩存起來,后續(xù)操作的時候,你可以直接僅僅修改這個對象中的某個字段的值。

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存儲一些列表型的數(shù)據(jù)結(jié)構(gòu),類似粉絲列表了、文章的評論列表了之類的東西。

還可以通過lrange命令,從某個元素開始讀取多少個元素,還可以基于list實現(xiàn)分頁查詢,這個很棒的一個功能?;趓edis實現(xiàn)簡單的高性能分頁,可以做類似微博那種下拉不斷分頁的東西,性能很高,一頁一頁的走。

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



   

(4)set

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

直接基于set將系統(tǒng)里需要去重的數(shù)據(jù)扔進去,自動就給去重了,如果你需要對一些數(shù)據(jù)進行快速的全局去重,你當然也可以基于jvm內(nèi)存里的HashSet進行去重。但是如果你的某個系統(tǒng)部署在多臺機器上呢?就得基于Redis進行全局的set去重了。

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

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



   

(5)sorted set

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

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

另外,這個數(shù)據(jù)類型很適合最排行榜這類的功能。

排行榜: 將每個用戶以及其對應的分數(shù)寫入進去
命令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數(shù)據(jù)類型和適用場景有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI