redis 中 bitfield 的使用

2021-10-23 03:45:28 字數 996 閱讀 3499

bitfield 有三個子指令,分別是 get/set/incrby,它們都可以對指定位片段進行讀寫,但是最多只能處理 64 個連續的位,如果超過 64 位,就得使用多個子指令,bitfield 可以一次執行多個子指令。

所以我們可以這樣操作:

127.0.0.1:6379> set w he

ok127.0.0.1:6379> bitfield w get u4 0 # 從第乙個位開始取 4 個位,結果是無符號數 (u)

1)(integer) 6

127.0.0.1:6379> bitfield w get u3 2 # 從第三個位開始取 3 個位,結果是無符號數 (u)

1)(integer) 5

127.0.0.1:6379> bitfield w get i4 0 # 從第乙個位開始取 4 個位,結果是有符號數 (i)

1)(integer) 6

127.0.0.1:6379> bitfield w get i3 2 # 從第三個位開始取 3 個位,結果是有符號數 (i)

1)(integer)

-3

我們首先得到 he 的 ascii 值,然後得到 ascii 的二進位制值。我們使用 python 來操作。

>>

> bin(ord(

'h'))

'0b1101000'

>>

> bin(ord(

'e'))

'0b1100101'

所以 he 表示為:

01101000 01100101
我解釋下這個有符號數的獲取規則:

bitfield w get i3 2  # 從第三個位開始取 3 個位,結果是有符號數 (i)
我們取到的是 101,第乙個位為 1,是符號位數,表示這是個負數。然後我們把 01 取反得 10,然後取補碼即 加1 得 11,結果就是 -3 了。

C C 中的位域 bit field

位域是c c 中常用的資料結構。在某些情況下合理的使用位域可以節省儲存空間,提高執行效率並提高程式的可讀行。按照我以往的程式設計經驗來看,通常以下情況下會優先考慮使用位域。1 有很多的狀態標記,需要集中儲存,比如tcp鏈結 的狀態 2 協議棧相關的資料結構,尤其是底層通訊協議中很多情況使用乙個或者幾...

C struct中的位域 bitfield

結構體的成員可以限制其位域,每個成員可以使用用比位元組還小的取值範圍,下面的結構體s1中,四個成員每個成員都是2bit的值 0 3 整個結構體佔據的空間依然是4個位元組,但是第乙個位元組中表示了四個成員,後續三個位元組沒有用到。struct s1 s1.a 1 s1.b 1 s1.c 1 s1.d ...

Redis中的事務

flushall清除所有的鍵值 1 multi 開啟事務,事務塊中的多條語句會按照順序放入佇列中。multi incr counter1 incr counter2 incr counter3 ping get counter1 2 exec 執行事務塊中的命令 3 watch 監視乙個或者多個ke...