redis數據類型-位域bitfield
文檔
- redis單機安裝
- redis常用的五種數據類型
- redis數據類型-位圖bitmap
- redis數據類型-基數統計HyperLogLog
- redis數據類型-地理空間GEO
- redis數據類型-流Stream
官方文檔
- 官網操作命令指南頁面:https://redis.io/docs/latest/commands/?name=get&group=string
- BITFIELD
位域:bitfield
說明
- 將redis字符串視為位數組
hello
字符串占用5個字節,一個字節8位,hello
用二進制表示為:h
:01101000
,e
:01100101
,l
:01101100
,l
:01101100
,o
:01101111
- 二進制轉換為十進制,有兩種方式,按照有符號轉換和無符號轉換,有符號轉換時,首位為
1
的表示負數,例如:一個4位的二進制1100
,無符號轉換為:12
,有符號轉換為:-4
- 二進制轉換為十進制,一個字節為一組,
hello
可以表示為:h
:104
,e
:101
,l
:108
,l
:108
,o
:111
- redis命令參數中,
u8
表示一個8位二進制按無符號轉換為十進制整數,i16
表示一個16位二進制按有符號轉換為十進制整數
基本命令
set k1 hello
:普通的set命令bitfield k1 get u8 0
:k1的值,從第0位開始,取8位,按無符號方式轉換為十進制整數。返回:104
bitfield k1 set i8 8 97
:k1的值,從第8位開始,取8位,設置為97,97轉化為8位有符號二進制為01100001
,對應的字符為a
。返回上一個當前位置的值,十進制bitfield k1 incrby u8 0 1
:k1的值,從第0位起,取8位,加1,按無符號方式轉換為十進制整數。返回當前位置的值,十進制
溢出控制
bitfield k1 overflow wrap set u4 0 17
:當設置的值大于或小于4位無符號二進制時,采用回繞的方式進行設置,這里設置的值為1
。返回上一個當前位置的值,十進制bitfield k1 overflow sat set u4 0 17
:飽和計算,上溢取最大值,下溢取最小值,這里設置的置為15
。返回上一個當前位置的值,十進制bitfield k1 overflow fail set u4 0 17
:溢出時,拒絕執行。返回:(nil)
舉例
將hello
變更為hatlo
hello
按字節分組,二進制為:h
:01101000
,e
:01100101
,l
:01101100
,l
:01101100
,o
:01101111
hello
按字節分組,十進制為:h
:104
,e
:101
,l
:108
,l
:108
,o
:111
hatlo
按字節分組,二進制為:h
:01101000
,a
:01100001
,t
:01110100
,l
:01101100
,o
:01101111
hatlo
按字節分組,十進制為:h
:104
,a
:97
,t
:116
,l
:108
,o
:111
方式1,按照字節變更,將第8
位開始連續8
位設置為97
,將第16
位開始連續8
位設置為116
set k2 hello
bitfield k2 set u8 8 97
bitfield k2 set u8 16 116
get k2
方式2,將整體的二進制放到一起,觀察需要變更的位
hello
:0110 1000,0110 0101,0110 1100,0110 1100,0110 1111
hatlo
:0110 1000,0110 0001,0111 0100,0110 1100,0110 1111
可以看到,只需要從第12
位開始的連續10
位變更即可,無符號二進制0001 0111 01
,即00 0101 1101
,轉十進制為93
set k3 hello
bitfield k3 set u10 12 93
get k3