redis支援五種資料型別:string(字串),hash(雜湊),list(列表),set(集合)及zset(sorted set:有序集合)。可以看出,redis是一種比較資料型別豐富的資料庫。redis內部使用乙個redisobject物件來表示所有的key和value。redisobject主要的資訊包括資料型別(type)、編碼方式(encoding)、資料指標(ptr)、虛擬記憶體(vm)等。type代表乙個value物件具體是何種資料型別,encoding是不同資料型別在redis內部式。
1、string(字串)型別
字串是redis值的最基礎的型別。redis中使用的字串是通過包裝的,基於c語言字元陣列實現的簡單動態字串(****** dynamic string, sds)乙個抽象資料結構。其原始碼定義如下:
struct sdshdr ;
假設上圖是」hello」字串的記憶體結構,這個時候len=5,free=2那麼redis包裝後(sds)其長度為:
sizeof(struct sdshdr) + len + free + 1
其中buf的大小為:
len + free + 1
1表示1個位元組是用來儲存結束符』\0』的。redis字串是二進位制安全的,因為二進位制資料通常會有中間某個位元組儲存』\0』的這種情況,這意味著乙個redis字串可以包含任何種類的資料,例如乙個jpeg影象或者乙個序列化的ruby物件。二進位制是否安全,簡單的理解就是能不能在字串中間有『\0』。
說明:string是最常用的一種資料型別,普通的key/value儲存都可以歸為此類。
2、hash(雜湊)型別
hash是乙個string型別的field和value之間的對映表,即redis的hash資料型別的key(hash表名稱)對應的value實際的內部儲存結構為乙個hashmap,因此hash特別適合儲存物件。相對於把乙個物件的每個屬性儲存為string型別,將整個物件儲存在hash型別中會占用更少記憶體。
hash 資料型別內部結構示意圖
需要注意的是,當前hashmap的實現有兩種方式:當hashmap的成員比較少時redis為了節省記憶體會採用類似一維陣列的方式來緊湊儲存,而不會採用真正的hashmap結構,這時對應的value的redisobject的encoding為zipmap,當成員數量增大時會自動轉成真正的hashmap,此時encoding為ht。由於hash資料型別可以形象地理解為一張關係一一對應的對映表,因此我們可以使用這種資料結構來對某個物件的資訊進行儲存,例如:使用者資訊、學生資訊等等。
3、list型別
redis的list型別其實就是每乙個元素都是string型別的雙向鍊錶。我們可以從鍊錶的頭部和尾部新增或者刪除元素。這樣的list既可以作為棧,也可以作為佇列使用。
list資料結構內部示意圖
由於這種資料的特殊性,我們可以用它來做一些訊息、列表和排行榜等功能。
4、set型別
redis 集合(set型別)是乙個無序的string型別資料的集合,類似list的乙個列表,與list不同的是set不能有重複的資料。實際上,set的內部是用hashmap實現的,set只用了hashmap的key列來儲存物件。當我們建立乙個hashset的時候實際上建立了乙個hashmap;set中的元素,只是存放在了底層hashmap的key上,底層hashmap的value列為空,遍歷hashset的時候從hashmap中取出keyset來遍歷。
set底層結構示意圖
由於set型別的元素是不重複的,因此,可以進行集合的交、並和差集的操作,因此可以求共同好友、共同興趣、分類標籤等。
5、sortset型別
sortset顧名思義,是乙個排好序的set,它在set的基礎上增加了乙個順序屬性score,這個屬性在新增修改元素時可以指定,每次指定後,sortset會自動重新按新的值排序。sorted set的內部使用hashmap和跳躍表(skiplist)來保證資料的儲存和有序,hashmap裡放的是成員到score的對映,而跳躍表裡存放的是所有的成員,排序依據是hashmap裡存的score。對於sortset型別,我們可以用它來做時間軸(按時間排序)的功能。
Redis學習(2) redis安裝
yum install gcc c alt r開啟上傳視窗,拖拽redis 3.0.0.tar.gz 上傳 tar zxvf redis 3.0.0.tar.gz進入解壓資料夾 cd redis 3.0.0 執行make make prefix user local redis install上面這...
redis學習筆記 2 redis的初始使用
set key value 新增鍵值對 get key 根據key獲取value del key 根據key刪除鍵值對 incr key 將value 1,如果沒有該key 預設設定該key值為0,並 1 key的型別必須為integer decr key 同上,將value 1 incrby ke...
2 Redis啟動後的雜項
1 檢視電腦效能 服務啟動的情況下 分布式記憶體資料庫redis 在 usr local bin 路徑下 執行 redis beachmark 可以看看電腦效能 官網每秒 讀11萬,寫8萬 參考檢視自己電腦的效能 2 預設16個資料庫,類似陣列下標從零開始,初始預設使用零號庫 配置檔案中 datab...