關于位圖,可能大家不太熟悉,
那么位圖能干啥呢?位圖的內容其實就是普通的字串,也就是byte陣列,我們都知道
| byte | 8 位無符號整數 | 0 到 255 |
說個場景,比如你處理一些業務時候,往往會存在 是或者不是 這樣的資料,那么這種資料還是頻繁去查看和請求,從資料方面和請求次數方面都是非常的大的,那么Redis位圖可以幫你解決,每天的記錄只占據一個位,他的存盤格式:0 1 0 1 0 1,在操作方面我們可以使用:get/set, gitbit/setbit等將byte陣列看成【位陣列】來處理,
說說他的特性:
位陣列是自動擴展的,如果超出現有內容范圍,它會自動將位陣列進行零擴充,
當然一般這種業務資料,都往往少不了統計,查找,那么位圖指令統計bitcount和查找bitpos,bitcount 用來統計指定位置范圍內 1 的個數,bitpos 用來查找指定范圍內出現的第一個 0 或 1,
bitpos指定的范圍是【start,end】,注意的是start 和 end 引數是位元組索引,也就是說指定的位范圍必須是 8 的倍數,
當然,我們都知道之前指定的位圖都是單個位的,當然也有一次操作多個位的,不過必須用管道,不過從3.2版本后,有個bitfield,有三個指令,分別是:get/set/incrby,它們都可以對指定位片段進行讀寫,但是最多只能處理 64 個連續的位,如果超過 64 位,就得使用多個子指令,bitfield 可以一次執行多個子指令,
BITFIELD mykey INCRBY i5 100 1 GET u4 0
當需要一個整型時,有符號整型需在位數前加i,無符號在位數前加u,例如,u8是一個8位的無符號整型,i16是一個16位的有符號整型,有符號整型最大支持64位,而無符號整型最大支持63位,對無符號整型的限制,是由于當前Redis協議不能在回應訊息中回傳64位無符號整數,
所謂有符號數是指獲取的位陣列中第一個位是符號位,剩下的才是值,如果第一位是 1,那就是負數,無符號數表示非負數,沒有符號位,獲取的位陣列全部都是值,有符號數最多可以獲取 64 位,無符號數只能獲取 63 位 (因為 Redis 協議中的 integer 是有符號數,最大 64 位,不能傳遞 64 位無符號值),如果超出位數限制,Redis 就會告訴你引數錯誤,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/227292.html
標籤:其他
