與memcached僅支援簡單的key-value結構的資料記錄不同,redis支援的資料型別要豐富得多。最為常用的資料型別主要有五種:string、hash、list、set和sorted set。redis內部使用乙個redisobject物件來表示所有的key和value。
type代表乙個value物件具體是何種資料型別,encoding是不同資料型別在redis內部的儲存方式,比如:type=string代表value儲存的是乙個普通字串,那麼對應的encoding可以是raw或者是int,如果是int則代表實際redis內部是按數值型類儲存和表示這個字串的,當然前提是這個字串本身可以用數值表示,比如:」123″ 「456」這樣的字串。只有開啟了redis的虛擬記憶體功能,vm欄位字段才會真正的分配記憶體,該功能預設是關閉狀態的。
1)string
常用命令:set/get/decr/incr/mget等;
應用場景:string是最常用的一種資料型別,普通的key/value儲存都可以歸為此類;
實現方式:string在redis內部儲存預設就是乙個字串,被redisobject所引用,當遇到incr、decr等操作時會轉成數值型進行計算,此時redisobject的encoding欄位為int。
2)hash
常用命令:hget/hset/hgetall等
應用場景:我們要儲存乙個使用者資訊物件資料,其中包括使用者id、使用者姓名、年齡和生日,通過使用者id我們希望獲取該使用者的姓名或者年齡或者生日;
實現方式:redis的hash實際是內部儲存的value為乙個hashmap,並提供了直接訪問這個map成員的介面。如圖所示,key是使用者id, value是乙個map。這個map的key是成員的屬性名,value是屬性值。這樣對資料的修改和訪問都可以直接通過其內部map的key(redis裡稱內部map的key為field), 也就是通過 key(使用者id) + field(屬性標籤) 就可以操作對應屬性資料。當前hashmap的實現有兩種方式:當hashmap的成員比較少時redis為了節省記憶體會採用類似一維陣列的方式來緊湊儲存,而不會採用真正的hashmap結構,這時對應的value的redisobject的encoding為zipmap,當成員數量增大時會自動轉成真正的hashmap,此時encoding為ht。
3)list
常用命令:lpush/rpush/lpop/rpop/lrange等;
應用場景:redis list的應用場景非常多,也是redis最重要的資料結構之一,比如twitter的關注列表,粉絲列表等都可以用redis的list結構來實現;
實現方式:redis list的實現為乙個雙向鍊錶,即可以支援反向查詢和遍歷,更方便操作,不過帶來了部分額外的記憶體開銷,redis內部的很多實現,包括傳送緩衝佇列等也都是用的這個資料結構。
4)set
常用命令:sadd/spop/smembers/sunion等;
應用場景:redis set對外提供的功能與list類似是乙個列表的功能,特殊之處在於set是可以自動排重的,當你需要儲存乙個列表資料,又不希望出現重複資料時,set是乙個很好的選擇,並且set提供了判斷某個成員是否在乙個set集合內的重要介面,這個也是list所不能提供的;
實現方式:set 的內部實現是乙個 value永遠為null的hashmap,實際就是通過計算hash的方式來快速排重的,這也是set能提供判斷乙個成員是否在集合內的原因。
5)sorted set
常用命令:zadd/zrange/zrem/zcard等;
應用場景:redis sorted set的使用場景與set類似,區別是set不是自動有序的,而sorted set可以通過使用者額外提供乙個優先順序(score)的引數來為成員排序,並且是插入有序的,即自動排序。當你需要乙個有序的並且不重複的集合列表,那麼可以選擇sorted set資料結構,比如twitter 的public timeline可以以發表時間作為score來儲存,這樣獲取時就是自動按時間排好序的。
實現方式:redis sorted set的內部使用hashmap和跳躍表(skiplist)來保證資料的儲存和有序,hashmap裡放的是成員到score的對映,而跳躍表裡存放的是所有的成員,排序依據是hashmap裡存的score,使用跳躍表的結構可以獲得比較高的查詢效率,並且在實現上比較簡單
redis資料型別
redis對比與memcached 最大的優勢就是支援更多靈活的資料結構,豐富的資料操作 redis現支援的資料型別有 字串,列表,集合,雜湊,有序集合 1.字串 普通資料型別 2.列表 簡單的字串列表,按照插入順序排序。你可以新增乙個元素到列表的頭部 左邊 或者尾部 右邊 適用於 對資料頭尾操作頻...
Redis 資料型別
redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 string是redis最基本的型別,你可以理解成與memcached一模一樣的型別,乙個key對應乙個value。string型別是二進位制安全的。意思是red...
Redis 資料型別
redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 string是redis最基本的型別,你可以理解成與memcached一模一樣的型別,乙個key對應乙個value。string型別是二進位制安全的。意思是red...