Redis-位圖

關於位圖,可能你們不太熟悉,git

那麼位圖能幹啥呢?位圖的內容其實就是普通的字符串,也就是byte數組,咱們都知道數組

byte 8 位無符號整數 0 到 255

說個場景。好比你處理一些業務時候,每每會存在 是或者不是 這樣的數據,那麼這種數據仍是頻繁去查看和請求,從數據方面和請求次數方面都是很是的大的。那麼Redis位圖能夠幫你解決。天天的記錄只佔據一個位,他的存儲格式:0 1 0 1 0 1。在操做方面咱們可使用:get/set, gitbit/setbit等將byte數組當作【位數組】來處理。spa

說說他的特性:code

位數組是自動擴展的,若是超出現有內容範圍,它會自動將位數組進行零擴充。索引

固然通常這種業務數據,都每每少不了統計,查找,那麼位圖指令統計bitcount和查找bitpos。bitcount 用來統計指定位置範圍內 1 的個數,bitpos 用來查找指定範圍內出現的第一個 0 或 1。字符串

bitpos指定的範圍是【start,end】。注意的是start 和 end 參數是字節索引,也就是說指定的位範圍必須是 8 的倍數,get

固然,咱們都知道以前指定的位圖都是單個位的,固然也有一次操做多個位的,不過必須用管道,不過從3.2版本後。有個bitfield,有三個指令,分別是:get/set/incrby,它們均可以對指定位片斷進行讀寫,可是最多隻能處理 64 個連續的位,若是超過 64 位,就得使用多個子指令,bitfield 能夠一次執行多個子指令。it

BITFIELD mykey INCRBY i5 100 1 GET u4 0

當須要一個整型時,有符號整型需在位數前加i,無符號在位數前加u。例如,u8是一個8位的無符號整型,i16是一個16位的有符號整型。有符號整型最大支持64位,而無符號整型最大支持63位。對無符號整型的限制,是因爲當前Redis協議不能在響應消息中返回64位無符號整數。table

所謂有符號數是指獲取的位數組中第一個位是符號位,剩下的纔是值。若是第一位是 1,那就是負數。無符號數表示非負數,沒有符號位,獲取的位數組所有都是值。有符號數最多能夠獲取 64 位,無符號數只能獲取 63 位 (由於 Redis 協議中的 integer 是有符號數,最大 64 位,不能傳遞 64 位無符號值)。若是超出位數限制,Redis 就會告訴你參數錯誤。
相關文章
相關標籤/搜索