突破Java面試(21) - redis有哪些數據類型,談談適用場景

1 面試題

redis都有哪些數據類型?分別在哪些場景下使用比較合適?git

2 考點分析

除非是感受看你簡歷,就是工做3年之內的比較初級的一個同窗,可能對技術沒有很深刻的研究過,我纔會問這類問題,在寶貴的面試時間裏,我實在是不想多問github

其實問這個問題,主要就倆緣由面試

  • 看看你到底有沒有全面的瞭解redis有哪些功能,通常怎麼來用,啥場景用什麼,就怕你別就會最簡單的kv操做
  • 看看你在實際項目裏都怎麼玩兒過redis

要是你回答的很差,沒說出幾種數據類型,也沒說什麼場景,你完了,面試官對你印象確定很差,以爲你平時就是作個簡單的set和get。redis

3 詳解

3.1 string

這是最基本的類型了,沒啥可說的,就是普通的set和get,作簡單的kv緩存緩存

3.2 hash

這個是相似map的一種結構,這個通常就是能夠將結構化的數據,好比一個對象(前提是這個對象沒嵌套其餘的對象)給緩存在redis裏,而後每次讀寫緩存的時候,能夠就操做hash裏的某個字段。bash

key=150

value={
  「id」: 150,
  「name」: 「zhangsan」,
  「age」: 20
}
複製代碼

hash類的數據結構,主要是用來存放一些對象,把一些簡單的對象給緩存起來,後續操做的時候,你能夠直接僅僅修改這個對象中的某個字段的值數據結構

value={
  「id」: 150,
  「name」: 「zhangsan」,
  「age」: 21
}
複製代碼

3.3 list

有序列表,這個是能夠玩兒出不少花樣的jvm

微博,某個大v的粉絲,就能夠以list的格式放在redis裏去緩存性能

key=某大v

value=[zhangsan, lisi, wangwu]
複製代碼

好比能夠經過list存儲一些列表型的數據結構,相似粉絲列表了、文章的評論列表之類的東西學習

好比能夠經過lrange命令,就是從某個元素開始讀取多少個元素,能夠基於list實現分頁查詢,這個很棒的一個功能,基於redis實現簡單的高性能分頁,能夠作相似微博那種下拉不斷分頁的東西,性能高,就一頁一頁走

好比能夠搞個簡單的消息隊列,從list頭懟進去,從list尾巴那裏弄出來

3.4 set

無序集合,自動去重

直接基於set將系統裏須要去重的數據扔進去,自動就給去重了,若是你須要對一些數據進行快速的全局去重,你固然也能夠基於jvm內存裏的HashSet進行去重,可是若是你的某個系統部署在多臺機器上呢?

得基於redis進行全局的set去重

能夠基於set玩兒交集、並集、差集的操做,好比交集吧,能夠把兩我的的粉絲列表整一個交集,看看倆人的共同好友是誰?對吧

把兩個大v的粉絲都放在兩個set中,對兩個set作交集

3.5 sorted set

排序的set,去重可是能夠排序,寫進去的時候給一個分數,自動根據分數排序,這個能夠玩兒不少的花樣,最大的特色是有個分數能夠自定義排序規則

好比說你要是想根據時間對數據排序,那麼能夠寫入進去的時候用某個時間做爲分數,人家自動給你按照時間排序了

排行榜:將每一個用戶以及其對應的什麼分數寫入進去,zadd board score username,接着zrevrange board 0 99,就能夠獲取排名前100的用戶;zrank board username,能夠看到用戶在排行榜裏的排名

zadd board 85 zhangsan
zadd board 72 wangwu
zadd board 96 lisi
zadd board 62 zhaoliu

96 lisi
85 zhangsan
72 wangwu
62 zhaoliu

zrevrange board 0 3
複製代碼

獲取排名前3的用戶

96 lisi
85 zhangsan
72 wangwu

zrank board zhaoliu

4

複製代碼

X 交流學習

  • 公衆號

圖片描述

相關文章
相關標籤/搜索