String(字符串)
- 簡介:String是Redis最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)類型,它是二進制安全的,可以存儲圖片或者序列化的對象,值最大存儲為512MSDS動態(tài)字符串,是一個簡單的動態(tài)字符串,采用預(yù)分配冗余空間的方式來減少內(nèi)存的頻繁分配,類似于Java中的ArrayList;
Hash(哈希)
- hash是一個鍵值對的集合,hash是一個string類型的field和value的映射表,hash特別適合用于存儲對象。類似于Java里面的map,hash特別適合用于存儲對象hash對應(yīng)的數(shù)據(jù)結(jié)構(gòu)是ziplist和hashtable(哈希表)當field-value長度較短且個數(shù)較少時,使用ziplist,否則使用hashtable
List(列表)
- 單鍵多值,按照插入順序排序,你可以添加一個元素列表的頭部或者尾部底層實際上是一個雙向鏈表,對兩邊的操作性能很高,通過索引下標的操作中間的節(jié)點性能會比較差lpush,rpush命令,
- 可以從左右兩邊插入值值在鍵在,值光鍵亡list的數(shù)據(jù)結(jié)構(gòu)為快速數(shù)據(jù)鏈表quiklist
- 首先在列表元素較少的情況下會使用一塊連續(xù)的內(nèi)存存儲,這個結(jié)構(gòu)式ziplist,也即是壓縮列表將所有的元素挨著一起存儲,分配的是一塊連續(xù)的內(nèi)存,當數(shù)據(jù)量比較多的時候才會變成quiklist
- 因為普通的列表需要的附加指針空間太大,會比較浪費空間,比如這個列表里存的只是int類型的數(shù)據(jù),結(jié)構(gòu)上還需要兩個額外的prev和next
- redis將鏈表和ziplist結(jié)合起來組成了quiklist。也就是將多個ziplist使用雙向指針串起來,這樣既滿足了快速的插入刪除性能,又不會出現(xiàn)太大的空間冗余
Set(集合)
set是string類型的無序集合,他底層其實是一個value為null的hash表,所以添加、刪除、查找的復(fù)雜度都是o(1)一個算法,隨著數(shù)據(jù)的增加,執(zhí)行的時間長短,如果是O(1),數(shù)據(jù)增加,查找數(shù)據(jù)的時間不變set的數(shù)據(jù)結(jié)構(gòu)是dist字典,字典是hash表實現(xiàn)的Zset(有序集合)
redis有序集合zset,與普通集合set非常相似,是一個沒有重復(fù)元素的字符串集合不同之處是有序集合的每個成員都關(guān)聯(lián)了一個評分,這個評分被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分是可以重復(fù)的因為元素是有序的,所以也可以很快的根據(jù)評分或者次序來獲取一個范圍的元素訪問有序集合的中間元素也是非常快的,hash,hash的作用是關(guān)聯(lián)元素value和權(quán)重score,保障元素value的唯一性,可以通過元素value找到對應(yīng)的score值跳躍表,跳躍表的目的在于給元素value排序,根據(jù)score的范圍獲取元素列表跳躍表的效率堪比紅黑樹,實現(xiàn)遠比紅黑樹簡單,可以快速找到元素三種特殊數(shù)據(jù)類型
Geospatial
Bitmaps本身不是一種數(shù)據(jù)類型,實際上它就是字符串(key-value),但是它可以對字符串的位進行操作Bitmaps單獨提供了一套命令,所以在Redis中使用BitMaps和使用字符串的方式不太相同,可以把Bitmaps想象成一個以位為單位的數(shù)組,數(shù)組的每個單元只能存儲0和1,數(shù)組的下標在Bitmaps中叫偏移量Hyperloglog
可以用來統(tǒng)計頁面訪問量數(shù)據(jù)存儲在MySQL表中,使用distinct count計算不重復(fù)的數(shù)使用redis提供的hash,set,bitmaps等數(shù)據(jù)結(jié)構(gòu)來處理以上方案的結(jié)果精確,但隨著數(shù)據(jù)不斷增加,導(dǎo)致占用空間越來越大,對于非常大的數(shù)據(jù)集是不切實際的HyperLoglog是用來基數(shù)統(tǒng)計的算法,優(yōu)點:在輸入元素的數(shù)量或者體積非常大時,計算基數(shù)所需的空間總是固定的,并且很小什么是基數(shù):比如數(shù)據(jù)集{1,3,5,7,5,7,8},那么這個數(shù)據(jù)集的基數(shù)集就為{1,3,5,7,8},基數(shù)(不重復(fù)元素)為5,基數(shù)估計就是在誤差可接受范圍內(nèi),快速計算基數(shù)Bitmap
提供了經(jīng)緯度設(shè)置,查詢,范圍查詢,距離查詢,經(jīng)緯度hash等常見操作命令geoadd 添加地理位置(經(jīng)度,緯度,名稱)命令geopos 獲得指定地區(qū)的坐標值命令geodist 獲取兩個位置之間的直線距離命令georadius,以給定的經(jīng)緯度為中心,找出某一半徑內(nèi)的元素鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。