在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Redis基本數(shù)據(jù)結(jié)構(gòu)

    五種基本數(shù)據(jù)類型

    String(字符串

    • 簡(jiǎn)介:String是Redis最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)類型,它是二進(jìn)制安全的,可以存儲(chǔ)圖片或者序列化的對(duì)象,值最大存儲(chǔ)為512MSDS動(dòng)態(tài)字符串,是一個(gè)簡(jiǎn)單的動(dòng)態(tài)字符串,采用預(yù)分配冗余空間的方式來(lái)減少內(nèi)存的頻繁分配,類似于Java中的ArrayList;

    Hash(哈希)

    • hash是一個(gè)鍵值對(duì)的集合,hash是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象。類似于Java里面的map,hash特別適合用于存儲(chǔ)對(duì)象hash對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是ziplist和hashtable(哈希表)當(dāng)field-value長(zhǎng)度較短且個(gè)數(shù)較少時(shí),使用ziplist,否則使用hashtable

    List(列表

    • 單鍵多值,按照插入順序排序,你可以添加一個(gè)元素列表的頭部或者尾部底層實(shí)際上是一個(gè)雙向鏈表,對(duì)兩邊的操作性能很高,通過(guò)索引下標(biāo)的操作中間的節(jié)點(diǎn)性能會(huì)比較差lpush,rpush命令
    • 可以從左右兩邊插入值值在鍵在,值光鍵亡list的數(shù)據(jù)結(jié)構(gòu)為快速數(shù)據(jù)鏈表quiklist
    • 首先在列表元素較少的情況下會(huì)使用一塊連續(xù)的內(nèi)存存儲(chǔ),這個(gè)結(jié)構(gòu)式ziplist,也即是壓縮列表將所有的元素挨著一起存儲(chǔ),分配的是一塊連續(xù)的內(nèi)存,當(dāng)數(shù)據(jù)量比較多的時(shí)候才會(huì)變成quiklist
    • 因?yàn)槠胀ǖ牧斜硇枰母郊又羔樋臻g太大,會(huì)比較浪費(fèi)空間,比如這個(gè)列表里存的只是int類型的數(shù)據(jù),結(jié)構(gòu)上還需要兩個(gè)額外的prev和next
    • redis將鏈表和ziplist結(jié)合起來(lái)組成了quiklist。也就是將多個(gè)ziplist使用雙向指針串起來(lái),這樣既滿足了快速的插入刪除性能,又不會(huì)出現(xiàn)太大的空間冗余

    Set(集合)

  • set是string類型的無(wú)序集合,他底層其實(shí)是一個(gè)value為null的hash表,所以添加、刪除、查找的復(fù)雜度都是o(1)
  • 一個(gè)算法,隨著數(shù)據(jù)的增加,執(zhí)行的時(shí)間長(zhǎng)短,如果是O(1),數(shù)據(jù)增加,查找數(shù)據(jù)的時(shí)間不變
  • set的數(shù)據(jù)結(jié)構(gòu)是dist字典,字典是hash表實(shí)現(xiàn)的
  • Zset(有序集合)

  • redis有序集合zset,與普通集合set非常相似,是一個(gè)沒(méi)有重復(fù)元素的字符串集合
  • 不同之處是有序集合的每個(gè)成員都關(guān)聯(lián)了一個(gè)評(píng)分,這個(gè)評(píng)分被用來(lái)按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評(píng)分是可以重復(fù)的
  • 因?yàn)樵厥怯行虻?,所以也可以很快的根?jù)評(píng)分或者次序來(lái)獲取一個(gè)范圍的元素
  • 訪問(wèn)有序集合的中間元素也是非常快的,
  • hash,hash的作用是關(guān)聯(lián)元素value和權(quán)重score,保障元素value的唯一性,可以通過(guò)元素value找到對(duì)應(yīng)的score值
  • 跳躍表,跳躍表的目的在于給元素value排序,根據(jù)score的范圍獲取元素列表
  • 跳躍表的效率堪比紅黑樹(shù),實(shí)現(xiàn)遠(yuǎn)比紅黑樹(shù)簡(jiǎn)單,可以快速找到元素
  • 三種特殊數(shù)據(jù)類型

    Geospatial

  • Bitmaps本身不是一種數(shù)據(jù)類型,實(shí)際上它就是字符串(key-value),但是它可以對(duì)字符串的位進(jìn)行操作
  • Bitmaps單獨(dú)提供了一套命令,所以在Redis中使用BitMaps和使用字符串的方式不太相同,可以把Bitmaps想象成一個(gè)以位為單位的數(shù)組,數(shù)組的每個(gè)單元只能存儲(chǔ)0和1,數(shù)組的下標(biāo)在Bitmaps中叫偏移量
  • Hyperloglog

  • 可以用來(lái)統(tǒng)計(jì)頁(yè)面訪問(wèn)量
  • 數(shù)據(jù)存儲(chǔ)在MySQL表中,使用distinct count計(jì)算不重復(fù)的數(shù)
  • 使用redis提供的hash,set,bitmaps等數(shù)據(jù)結(jié)構(gòu)來(lái)處理
  • 以上方案的結(jié)果精確,但隨著數(shù)據(jù)不斷增加,導(dǎo)致占用空間越來(lái)越大,對(duì)于非常大的數(shù)據(jù)集是不切實(shí)際的
  • HyperLoglog是用來(lái)基數(shù)統(tǒng)計(jì)的算法,優(yōu)點(diǎn):在輸入元素的數(shù)量或者體積非常大時(shí),計(jì)算基數(shù)所需的空間總是固定的,并且很小
  • 什么是基數(shù):比如數(shù)據(jù)集{1,3,5,7,5,7,8},那么這個(gè)數(shù)據(jù)集的基數(shù)集就為{1,3,5,7,8},基數(shù)(不重復(fù)元素)為5,基數(shù)估計(jì)就是在誤差可接受范圍內(nèi),快速計(jì)算基數(shù)
  • Bitmap

  • 提供了經(jīng)緯度設(shè)置,查詢,范圍查詢,距離查詢,經(jīng)緯度hash等常見(jiàn)操作
  • 命令geoadd 添加地理位置(經(jīng)度,緯度,名稱)
  • 命令geopos 獲得指定地區(qū)的坐標(biāo)值
  • 命令geodist 獲取兩個(gè)位置之間的直線距離
  • 命令georadius,以給定的經(jīng)緯度為中心,找出某一半徑內(nèi)的元素
  • 鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年6月15日 06:15
    下一篇 2022年6月15日 06:15

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息