Redis 五種資料型別

2021-07-16 01:37:11 字數 2629 閱讀 4795

一、前言:

上篇部落格已經對redis的一些基本知識做了一些簡介,這篇部落格,將簡單介紹一些redis的五種資料型別。分別為string(字串)、hash(雜湊)、list(鍊錶)、set(集合)、zset(有序集合)。對這些型別可以執行很多原子性的操作:比如向乙個string型別的value後面追加字串;向list中新增乙個元素或減少乙個元素;計算set的交、並、減;甚至可以獲取乙個sorted set中的最大值。

二、string型別:

1、常用命令:set、get、decr、incr等

2、應用場景:

string是最常用的資料型別,普通的key/value儲存都可以歸為此類,在此不再贅述。

3、實現方式:

string在redis內部預設儲存就是乙個字串。當遇到incr、decr等操作時會轉換成數值型進行計算,此時redisobjects的encoding欄位為int。

三、list型別:

1、常用命令:lpush、rpush、lpop、rpop、lrange等

2、應用場景:

list的應用場景非常多,比如twitter的關注列表、粉絲列表等都可以用list結構來實現。可以輕鬆實現最新訊息排行等功能。list的另乙個應用就是訊息佇列,可以利用list的push操作,將任務存在list中,然後工作執行緒再用pop操作將任務取出進行執行。

3、實現方式:

list的實現為 乙個雙向鍊錶,可以支援反向查詢和遍歷,更方便操作,不過帶來了額外的記憶體開銷,redis內部的很多實現包括傳送緩衝佇列等也都是用的 這個資料結構。

四、hash型別:

常見命令:hget,hset,hgetall等

應用場景:比如我們使用普通的key/value結構來儲存乙個使用者的資訊物件,包含以下資訊:使用者id為key、姓名name、年齡age、生日birthday等資訊為value。

第一種方式:將使用者id作為查詢key,其他資訊封裝成乙個物件以序列化的方式儲存。(set u111 '張三,,18,19930202')

這種方式的缺點是:增加了序列化/反序列化的開銷。當需要修改其中一項資訊時,需要把整個物件取回,並且修改操作需要對併發進行保護。

第二種方式:使用者資訊物件有多少成員就存多少個key-value對兒,用使用者id+對應屬性的名稱作為唯一標識來取得相應屬性的值。(mset user:001:name 「李三」 user:001:birthday "20010101")這樣雖然省去了序列化開銷和併發問題,但是使用者id為重複儲存,如果存在大量這樣的資料,記憶體浪費還是非常大的。

那麼redis提供的hash很好的解決了這個問題,redis的hash實際是內部儲存的value為乙個hashmap,並提供了直接訪問這個map成員的介面(如 hmset user:001 name "李三" age 18 birthday 「20010101」)也就是說,key仍然是使用者id,value是乙個map,這個map的key是成員的屬性名,value是屬性值,這樣對資料的修改和訪問都可以直接通過內部的map的key,也就是通過key(使用者id)+field(屬性標籤)操作對應資料了,既不需要重複儲存資料,也不會帶來序列化和併發修改控制的問題。

redis  hash對應的value內部實際就是乙個hashmap,實際這裡會有2中不同的實現方式。這個hash的成員比較少時redis為了節省記憶體會採用類似一維陣列的方式來緊湊儲存,而不會採用真正的hashmap結構。

五、set型別:

常用命令:sadd,srem,spop,sdiff,smembers,sunion等。

應用場景:

redis set對外提供的功能與list類似,是乙個列表的功能,特殊之處在於set可以自動重排的,當你需要儲存乙個列表資料,又不希望出現重複資料時,set是乙個很好的選擇,並且set提供了判斷某個成員是否在乙個set集合內的重要介面,這個也是list所不能提供的。

實現方式:

set的內部實現是乙個value用於為null的hashmap,實際就是通過計算hash的方式來快速重排的,這也是set能提供判斷乙個成員是否在集合內的原因。

六、sorted  set

常用命令:

sadd,zrange,zrem,zcard等

使用場景:

redis sorted set的使用場景與set類似,區別是set不是自動有序的,而sorted set 可以通過使用者額外提供乙個優先順序(score)的引數來為成員排序,並且是插入有序的,即自動排序。當你需要乙個有序的並且不重複的集合列表,那麼 可以選擇sorted set資料結構。

實現方式:

和sets相比,sorted sets是將 set 中的元素增加了乙個權重引數 score,使得集合中的元素能夠按 score 進行有序排列。另外還可以用 sorted sets 來做帶權重的佇列。讓重要的任務優先執行。

1.帶有權重的元素,比如乙個遊戲的使用者得分排行榜

2.比較複雜的資料結構,一般用到的場景不算太多

Redis 五種資料型別

目錄 redis共有strings hashs lists sets sorted sets五種資料型別,可以說已經比較豐富了。下面只對這幾種資料型別的資料結構與用途做簡要介紹。至於每種資料型別的操作api,這裡只簡單一提,不再一一詳細介紹,有需要的使用者可以google即可。string是最簡單的...

Redis 五種資料型別

redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 資料型別一 字串 0.1 6379 set name hubotao2 ok127.0 0.1 6379 get name hubotao2 資料型別二 hash...

Redis五種資料型別

資料型別 包括五種string list hash set zset 字串是二進位制安全的,可以包含任何資料 比如,或者序列化的物件 乙個字串的value最大值,可以為512m 列表按照插入順序排序 可以新增乙個元素,到列表的頭部左邊,或者尾部右邊 底層實現是乙個鍊錶 乙個鍵值對集合 string型...