<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          吃透Redis系列:琳瑯滿目的數(shù)據(jù)類型(下篇,文末彩蛋)

          共 4146字,需瀏覽 9分鐘

           ·

          2024-04-11 13:10

          歡迎關(guān)注微信公眾號: 互聯(lián)網(wǎng)全棧架構(gòu)

          上一篇文章我們介紹了Redis的五種基本數(shù)據(jù)類型,詳細(xì)內(nèi)容請參見:吃透Redis系列:琳瑯滿目的數(shù)據(jù)類型(上篇)。除了這幾種基本的數(shù)據(jù)類型外,Redis還提供了五種擴(kuò)展數(shù)據(jù)類型,從使用頻率上來講,它可能不如基本數(shù)據(jù)類型那么高,但對于某些特定應(yīng)用場景,它們能很好滿足,所以也有必要進(jìn)行學(xué)習(xí)和了解,以便有備無患。 在文章的最后,我們用一張圖來總結(jié)這十種數(shù)據(jù)類型的含義(畢竟,一圖勝千言,更方便記?。?。為了方便閱讀,還是把這張數(shù)據(jù)類型的思維導(dǎo)圖放出來: d13f8ec3dcda5a675575766018ba49b8.webp

          1

          Stream


          Stream是流的意思,它類似于一個(gè)日志追加(append-only)的數(shù)據(jù)結(jié)構(gòu),在實(shí)際應(yīng)用中,它主要用于實(shí)現(xiàn)消息隊(duì)列的功能,也可以用于記錄和處理各種事件,或者作為一個(gè)通知系統(tǒng),把消息推送給用戶或者其他系統(tǒng)。 在Stream中,每條數(shù)據(jù)都被賦予唯一的一個(gè)序列號,可以使用這個(gè)序列號來獲取關(guān)聯(lián)的數(shù)據(jù),或者處理Stream中后面的數(shù)據(jù),這個(gè)序列號是隨著時(shí)間順序遞增的。

          Stream的一些常用操作(更詳細(xì)的說明請參考官方網(wǎng)站):

          #用于向Stream中添加消息

          XADD key <* | id > field value [field value ...]


          #從Stream中讀取消息

          XREAD [COUNT count] STREAMS key [key ...] id [id ...]

          #獲取指定范圍內(nèi)的消息

          XRANGE key start end [COUNT count]


          #返回消息的數(shù)量

          XLEN key

          示例:

                  
                  127.0.0.1:6379> XADD mystream * name Tom age 23 height 178
          "1709386483610-0"
          127.0.0.1:6379> XREAD COUNT 1 STREAMS mystream 0
          11"mystream"
             211"1709386483610-0"
                   21"name"
                      2"Tom"
                      3"age"
                      4"23"
                      5"height"
                      6"178"
          127.0.0.1:6379> XRANGE mystream - +
          11"1709386483610-0"
             21"name"
                2"Tom"
                3"age"
                4"23"
                5"height"
                6"178"
          127.0.0.1:6379XLEN mystream
          (integer) 1

          2

          Geospatial


          翻譯過來是地理空間的意思,它可以用來保存坐標(biāo)并進(jìn)行搜索。對于地理位置和距離計(jì)算的需求,這種數(shù)據(jù)結(jié)構(gòu)非常適合。地理位置使用經(jīng)度和緯度來表示。 向key中添加地理位置的命令如下(其它命令參見官網(wǎng)):

          #將一個(gè)或者多個(gè)位置添加到key中。其中l(wèi)ongtitude是經(jīng)度,latitude是緯度,member是地理位置的名稱

          GEOADD key longitude latitude member [longitude latitude member ...]

          3

          Bitmap


          Bitmap就是位圖,它不是一個(gè)真正意義上的數(shù)據(jù)結(jié)構(gòu),而是對于字符串類型的一些位操作,通過最小的單位bit來進(jìn)行0和1的設(shè)置。使用它進(jìn)行存儲非常節(jié)省空間且運(yùn)行效率高,比較適合活躍用戶統(tǒng)計(jì)、登錄天數(shù)計(jì)算、過濾器等應(yīng)用場景。

          Bitmap的一些常用操作:

          #設(shè)置或者清除某一位上的值

          SETBIT key offset value


          #獲取某一位上的值

          GETBIT key offset


          #統(tǒng)計(jì)1的數(shù)量

          BITCOUNT key [start end [BYTE | BIT]]

          示例:

                
                # 比如統(tǒng)計(jì)登錄天數(shù),第一天在線,第三天在線,最后統(tǒng)計(jì)出來一共兩天在線
          127.0.0.1:6379> SETBIT user-login 1 1
          (integer) 0
          127.0.0.1:6379> SETBIT user-login 3 1
          (integer) 0
          127.0.0.1:6379> GETBIT user-login 3
          (integer) 1
          127.0.0.1:6379> BITCOUNT user-login
          (integer) 2


          4

          Bitfield


          Bitfield(位域),它把字符串當(dāng)成位數(shù)組進(jìn)行處理,它 可以操作任意位長度的整數(shù),從無符號的1位整數(shù)到有符號的63位整數(shù)。 這些值是使用二進(jìn)制編碼的Redis字符串來存儲的。 bitfield結(jié)構(gòu)支持原子的讀、寫和增加操作,使它們成為管理計(jì)數(shù)器和類似數(shù)值的好選擇。

          5

          HyperLogLog


          HyperLogLog,它是用來做基數(shù)統(tǒng)計(jì)的,所謂基數(shù),是指集合中不同元素的個(gè)數(shù),而基數(shù)統(tǒng)計(jì)是指在允許誤差的情況下估算出一組數(shù)據(jù)的基數(shù)。它經(jīng)常用于統(tǒng)計(jì)網(wǎng)站的ip訪問量、頁面的uv數(shù)等場景。

          HyperLogLog的一些常用操作:

          #將任意數(shù)量的元素添加到HyperLogLog

          PFADD key [element [element ...]]


          #返回一個(gè)或者多個(gè)key的近似基數(shù)

          PFCOUNT key [key ...]


          #將多個(gè)HyperLogLog合并為一個(gè)HyperLogLog

          PFMERGE destkey [sourcekey [sourcekey ...]]

          示例:

                  
                  127.0.0.1:6379> PFADD web-view "Tom" "John" "Tony"
          (integer) 1
          127.0.0.1:6379> PFCOUNT web-view
          (integer) 3
          127.0.0.1:6379> PFADD web-view2 "John"
          (integer) 1
          127.0.0.1:6379> PFMERGE web-view web-view2
          OK
          127.0.0.1:6379> PFCOUNT web-view
          (integer) 3


          6

          總結(jié)


          本文介紹了五種擴(kuò)展數(shù)據(jù)類型,包括流、地理空間、位圖、位域、基數(shù)統(tǒng)計(jì)等,它們對于一些互聯(lián)網(wǎng)相關(guān)的業(yè)務(wù)需求非常適合,與傳統(tǒng)的實(shí)現(xiàn)方案相比(比如采用關(guān)系型數(shù)據(jù)庫),這些數(shù)據(jù)結(jié)構(gòu)可能更有針對性、效率更高,使用起來也更為簡便 。

          為了方便記憶和理解,我們用一張示例圖來總結(jié)這十種數(shù)據(jù)類型的含義:

          cb5893996a2cfd4b7e975f6624cd4c19.webp


          創(chuàng)作不易,煩請點(diǎn)個(gè)在看、點(diǎn)個(gè)贊,非常感謝!


          鳴謝: https://architecturenotes.co/redis/


          推薦閱讀:

          吃透Redis系列:琳瑯滿目的數(shù)據(jù)類型(上篇)

          吃透Redis系列:總體介紹

          離大譜,MySQL竟然無視空格的存在!

          瀏覽 55
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日逼网站免费看 | 69毛片| 桃乃木香奈中文字幕 | 国产精品久久久久久久久吹潮 | 热热热热热色 |