【bitmap】Redis數據結構bitmap


一.背景

  這幾天,項目中引入了基於redisson的布隆過濾器,redisson底層使用的redis數據結構為bitmap,

借此機會,留下一篇總結;

 

二.bitMap的原理

  bitmap就是通過最小的單位bit來進行0或者1的設置,表示某個元素對應的值或者狀態。

  一個bit的值,或者是0,或者是1;也就是說一個bit能存儲的最多信息是2。

 

三.bitMap的常用API

  1.設置值

setbit key offset value

  例如:

setbit online 1001 1

  2.獲取值,返回

getbit key offset

  例如:

getbit online 1006

  3.獲取位圖指定范圍為1的個數,start和end指定的是字節的個數,而不是位數組下標

bitcount key [start end]

  例如

bitcount online 

 

四.案例bitMap統計用戶在線人數

  狀態值,用戶在線用1表示,用戶離線用0表示

  setbit online userid 狀態值

  例如

  1.設置用戶在線狀態

    setbit online 1001 1,表示設置id為1001的用戶在線

    setbit online 1002 1,表示設置id為1002的用戶在線

    setbit online 1003 0,表示設置id為1003的用戶離線

  2.獲取用戶在線狀態

    getbit online 1001 ,表示獲取id為1001的用戶在線狀態

    getbit online 1002 ,表示獲取id為1002的用戶在線狀態

  3.統計在線用戶的人數

    bitcount online 

  

五.性能

  1.以第四部分的案例為例,如果用戶id長度為4,則用戶id最多占用的比特位的數量為9999,大約即1250個字節,1KB多一點

  2.如果活躍用戶在百萬級別,使用Redis BitMap很划算。

  3.如果活躍用戶很少,而用戶id都是10位以上的int。那就很浪費內存了,還不如使用set集合,然后求交集就可以了。

 

參考鏈接:

  http://redisdoc.com/bitmap/index.html

  https://blog.csdn.net/u011957758/article/details/74783347

  https://www.freesion.com/article/8176271491/

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM