Redis-點陣圖
阿新 • • 發佈:2020-11-24
關於點陣圖,可能大家不太熟悉,
那麼點陣圖能幹啥呢?點陣圖的內容其實就是普通的字串,也就是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 就會告訴你引數錯誤。