一)BIT簡介
BIT位圖不是實際的數據類型,而是在String類型上定義的一組面向位的操作。而String類型的key是二進制格式的,所以任意二進制格式的數據都可以作爲key。
二)SETBIT和GETBIT命令
第一步:使用set命令設置一個字符串,set sbit ABC,字符ABC的ASCII值分別爲65、66、67。Redis中是以8位二進制的方式存儲,列舉表格如下:
ABC二進制表格 | ||||||||||||||||||||||||
字母 | A | B | C | |||||||||||||||||||||
ASCII | 65 | 66 | 67 | |||||||||||||||||||||
二進制 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
下標 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
GETBIT命令: getbit key offset,獲取指定offset下標的二進制,返回0或者1。當offset超過下標時,一直返回0。
SETBIT命令:setbit key offset value,將指定key的offset下標設置爲0或者1。例如把offset=6下標的value設置爲1,則ABC就變成了CBC了,在把offset=7下標的value設置爲0,則CBC就變成了BBC了。
總結:setbit主要是正對於offset下標,然後修改對應二進制位的value,針對於位的操作。該操作主要是爲了方便舉例,在ABC二進制位上操作,也可以操作其它的位數,但需知道對應字母的ASCII表和二進制表。
三)BITCOUNT命令
BITCOUNT命令:bitcount key [start end],可以獲得字符串類型鍵中值是1的二進制位個數。
統計字符串ABC的二進制位爲1的數量:7
統計字符串A的二進制位爲1的數量:2
統計字符串AB的二進制位爲1的數量:4
統計字符串BC的二進制位爲1的數量:5
四)BITOP命令
BITOP命令:bitop operation destkey key [key ...],在不同的字符串之間執行按位運算。提供的運算爲AND,OR,XOR和NOT。
含義:對多個字符串key進行操作,並把結果存儲到destkey中。
bitop or res s1 s2命令操作:把字符串s1和字符串s2進行or操作,然後把結果存儲到字符串res中
s1 | A | B | C | |||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | |
OR | ||||||||||||||||||||||||
s2 | C | B | A | |||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | |
= | ||||||||||||||||||||||||
res | C | B | C | |||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
效果圖:
bitop and res s1 s2命令操作:對每一位進行AND操作
s1 | A | B | C | |||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | |
AND | ||||||||||||||||||||||||
s2 | C | B | A | |||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | |
= | ||||||||||||||||||||||||
res | A | B | A | |||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
效果圖:
識別二維碼關注個人微信公衆號
本章完結,待續,歡迎轉載!
本文說明:該文章屬於原創,如需轉載,請標明文章轉載來源!