2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

Bit命令

 小樣樣樣樣樣樣 2022-02-13

命令簡介:
1)setbit:設置字符串指定偏移量bit
2)getbit:獲取字符串指定偏移量bit
3)bitcount:獲取字符串位中為1的數量
4)bitpos:獲取指定范圍的位圖中第一個值為bit的二進制位的位置
5)bitop:對一個或者多個保存二進制位的字符串key進行位元操作,并且將結果保存到destkey上
6)bitfield

命令詳解:
1.setbit
可用版本: >=2.2.0
時間復雜度: O(1)
命令格式: setbit key offset value
作用:
對key存儲的字符串值,設置或者清除指定偏移量上的位Bit。
返回值:
指定偏移量原本存儲的位。
注意:
位的設置或者清除取決于value參數,可以是0與1。
當key不存在時,會自動生成。
字符串會自動進行伸縮以確保它可以將value保存在指定的偏移量上。當字符串進行伸縮時,空白位置以0填充。
offset參數必須大于等于0,小于2^32。

2.getbit
可用版本: >=2.2.0
時間復雜度: O(1)
命令格式: getbit key offset
作用:
獲取key存儲字符串值,指定偏移量上的位。
返回值:
指定偏移量原本存儲的位。
注意:
當offset大于字符串長度,或者key不存在時返回0。

3.bitcount
可用版本: >=2.6.0
時間復雜度: O(N)
命令格式: bitcount key [start] [end]
作用:
獲取key存儲字符串值,一定范圍內,位值為1的數量。
返回值:
位值為1的數量。
注意:
start與end可以是負數。
不存在的key當作空字符串處理,返回0。

4.bitpos
可用版本: >=2.8.7
時間復雜度: O(N)
命令格式: bitpos key bit [start] [end]
作用:
獲取指定范圍的位圖中第一個值為bit的二進制位的位置。
返回值:
整數位置。
注意:
默認情況下,檢測整個位圖。也可以使用start end參數,指定檢測的范圍。

5.bitop
可用版本: >=2.6.0
時間復雜度: O(N)
命令格式: bitop operation destkey key [key...]
作用:
對一個或多個保存二進制位的字符串 key 進行位元操作,并將結果保存到 destkey 上。
返回值:
保存到 destkey 的字符串的長度,和輸入 key 中最長的字符串長度相等。
注意:
operation之內是以下幾個選項:
1)AND-對一個或者多個key求邏輯并,并將結果保存到destkey上。
2)OR-對一個或者多個key求邏輯或,并將結果保存到destkey上。
3)XOR-對一個或者多個key求邏輯異或,并將結果保存到destkey上。
4)NOT-對一個或者多個key求邏輯非,并將結果保存到destkey上,not只支持一個key。
字符串長度不一時,短的字符串將會使用0自動填充。

6.bitfield
可用版本: >=3.2.0
時間復雜度: O(1)
命令格式: bitfield key [GET type offset] [set type offset value] [incrby type offset increment] [overflow wrap|sat|fail]
作用:
bitfield命令將一個redis字符串看作是一個由二進制位組成的數組,并對這個數組中存儲的長度不同的整數進行訪問。
bitfield命令可以在一次調用中同時對多個位范圍進行操作,它接受一系列待執(zhí)行的操作作為參數,并返回一個數組作為回復,數組中每一個元素就是對應操作的執(zhí)行結果。
BITFIELD 命令的作用在于它能夠將很多小的整數儲存到一個長度較大的位圖中, 又或者將一個非常龐大的鍵分割為多個較小的鍵來進行儲存, 從而非常高效地使用內存, 使得 Redis 能夠得到更多不同的應用 —— 特別是在實時分析領域: BITFIELD 能夠以指定的方式對計算溢出進行控制的能力, 使得它可以被應用于這一領域。
返回值:
BITFIELD 命令的返回值是一個數組, 數組中的每個元素對應一個被執(zhí)行的子命令。 需要注意的是, OVERFLOW 子命令本身并不產生任何回復。
注意:
使用 GET 子命令對超出字符串當前范圍的二進制位進行訪問(包括鍵不存在的情況), 超出部分的二進制位的值將被當做是 0 。
使用 SET 子命令或者 INCRBY 子命令對超出字符串當前范圍的二進制位進行訪問將導致字符串被擴大, 被擴大的部分會使用值為 0 的二進制位進行填充。 在對字符串進行擴展時, 命令會根據字符串目前已有的最遠端二進制位, 計算出執(zhí)行操作所需的最小長度。
子命令支持:
GET —— 返回指定的二進制位范圍。
SET —— 對指定的二進制位范圍進行設置,并返回它的舊值。
INCRBY —— 對指定的二進制位范圍執(zhí)行加法操作,并返回它的舊值。用戶可以通過向 increment 參數傳入負值來實現相應的減法操作。
OVERFLOW [WRAP|SAT|FAIL]——改變之后執(zhí)行的 INCRBY 子命令在發(fā)生溢出情況時的行為。
偏移量:
在二進制位范圍命令中, 用戶有兩種方法來設置偏移量:
如果用戶給定的是一個沒有任何前綴的數字, 那么這個數字指示的就是字符串以零為開始(zero-base)的偏移量。
另一方面, 如果用戶給定的是一個帶有 # 前綴的偏移量, 那么命令將使用這個偏移量與被設置的數字類型的位長度相乘, 從而計算出真正的偏移量。
比如說, 對于以下這個命令來說:
BITFIELD mystring SET i8 #0 100 i8 #1 200

命令會把 mystring 鍵里面, 第一個 i8 長度的二進制位的值設置為 100 , 并把第二個 i8 長度的二進制位的值設置為 200 。 當我們把一個字符串鍵當成數組來使用, 并且數組中儲存的都是同等長度的整數時, 使用 # 前綴可以讓我們免去手動計算被設置二進制位所在位置的麻煩。
溢出控制:
用戶可以通過 OVERFLOW 命令以及以下展示的三個參數, 指定 BITFIELD 命令在執(zhí)行自增或者自減操作時, 碰上向上溢出(overflow)或者向下溢出(underflow)情況時的行為:
WRAP : 使用回繞(wrap around)方法處理有符號整數和無符號整數的溢出情況。 對于無符號整數來說, 回繞就像使用數值本身與能夠被儲存的最大無符號整數執(zhí)行取模計算, 這也是 C 語言的標準行為。 對于有符號整數來說, 上溢將導致數字重新從最小的負數開始計算, 而下溢將導致數字重新從最大的正數開始計算。 比如說, 如果我們對一個值為 127 的 i8 整數執(zhí)行加一操作, 那么將得到結果 -128 。
SAT : 使用飽和計算(saturation arithmetic)方法處理溢出, 也即是說, 下溢計算的結果為最小的整數值, 而上溢計算的結果為最大的整數值。 舉個例子, 如果我們對一個值為 120 的 i8 整數執(zhí)行加 10 計算, 那么命令的結果將為 i8 類型所能儲存的最大整數值 127 。 與此相反, 如果一個針對 i8 值的計算造成了下溢, 那么這個 i8 值將被設置為 -127 。
FAIL : 在這一模式下, 命令將拒絕執(zhí)行那些會導致上溢或者下溢情況出現的計算, 并向用戶返回空值表示計算未被執(zhí)行。
需要注意的是, OVERFLOW 子命令只會對緊隨著它之后被執(zhí)行的 INCRBY 命令產生效果, 這一效果將一直持續(xù)到與它一同被執(zhí)行的下一個 OVERFLOW 命令為止。 在默認情況下, INCRBY 命令使用 WRAP 方式來處理溢出計算。
以下是一個使用 OVERFLOW 子命令來控制溢出行為的例子:

> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
1) (integer) 1
2) (integer) 1
> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
1) (integer) 2
2) (integer) 2
> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
1) (integer) 3
2) (integer) 3
> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
1) (integer) 0  -- 使用默認的 WRAP 方式處理溢出
2) (integer) 3  -- 使用 SAT 方式處理溢出

而以下則是一個因為 OVERFLOW FAIL 行為而導致子命令返回空值的例子:

> BITFIELD mykey OVERFLOW FAIL incrby u2 102 1
1) (nil)

性能注意事項:
BITFIELD 在一般情況下都是一個快速的命令, 需要注意的是, 訪問一個長度較短的字符串的遠端二進制位將引發(fā)一次內存分配操作, 這一操作花費的時間可能會比命令訪問已有的字符串花費的時間要長。
二進制位的排列:
BITFIELD 把位圖第一個字節(jié)偏移量 0 上的二進制位看作是 most significant 位, 以此類推。 舉個例子, 如果我們對一個已經預先被全部設置為 0 的位圖進行設置, 將它在偏移量 7 的值設置為 5 位無符號整數值 23 (二進制位為 10111 ), 那么命令將生產出以下這個位圖表示:

+--------+--------+
|00000001|01110000|
+--------+--------+

當偏移量和整數長度與字節(jié)邊界進行對齊時, BITFIELD 表示二進制位的方式跟大端表示法(big endian)一致, 但是在沒有對齊的情況下, 理解這些二進制位是如何進行排列也是非常重要的。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多