參考資料:redis終章html
redis有五種基本數據類型,分別是String、List、Hash、Set、Sorted Set,接下來會逐個介紹每種類型及其應用場景。redis
String
是最簡單也是最經常使用的數據類型,經過set
和get
方法設置或獲取數據,有以下使用場景緩存
JSON
字符串,讀取後再轉換回目標對象;incr
命令實現自增。實現計數器這是相似Map
的一種結構,經過hset
和hget
方法設置或獲取數據。暫時在項目中沒有應用到這種結構。markdown
List
是簡單的字符串列表,按照插入順序排序,列表的頭部是左邊,尾部是右邊。頭尾均可以添加或移除元素。經常使用命令分佈式
應用場景:oop
消息隊列:能夠使用左進右出,或者右進左出,生產者在一端壓入數據,消費者從另外一端彈出數據。redis實現消息隊列spa
注意:這種消息隊列須要消費者不斷輪詢,同時能夠使用blpop
或者brpop
,這兩個指令在列表沒有元素時,會一直阻塞。.net
Set
是無序集合,會自動去重。經常使用命令code
這種數據類型主要特色時可以去重,在分佈式環境下,能夠使用redis
的set
實現全局數據去重。orm
Sorted set
既能夠去重,又能夠排序。與set
相比,寫入value時,還須要設置score
,redis會自動根據分數從小到達排序。經常使用命令
應用場景:
**延時隊列:**把任務執行時間戳做爲score,應用程序不斷輪詢redis,獲取分數最小的元素,比較score和當前時間戳。
**排行榜:**好比歌曲榜單、遊戲排行榜。多維度排序
多數場景下,咱們須要多維度的排序,好比:軟件下載榜單,先按照下載量排序,若是下載量相同,再按照最新下載時間排序.
針對這種兩維度排序,因爲score是浮點型,咱們能夠構建一個特殊的分數,整數部分爲下載量,小數部分是下載時間,這樣就實現兩個維度排序。
可是,若是是三個維度、四個維度呢??
自定義權重公式,好比
score=下載量*10000 + 下載時間