1. 程式人生 > 實用技巧 >Redis-點陣圖

Redis-點陣圖

關於點陣圖,可能大家不太熟悉,

那麼點陣圖能幹啥呢?點陣圖的內容其實就是普通的字串,也就是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 就會告訴你引數錯誤。