主頁 > 資料庫 > Bit命令

Bit命令

2021-01-27 08:00:34 資料庫

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

命令會把 mystring 鍵里面, 第一個 i8 長度的二進制位的值設定為 100 , 并把第二個 i8 長度的二進制位的值設定為 200 , 當我們把一個字串鍵當成陣列來使用, 并且陣列中儲存的都是同等長度的整數時, 使用 # 前綴可以讓我們免去手動計算被設定二進制位所在位置的麻煩,
溢位控制:
用戶可以通過 OVERFLOW 命令以及以下展示的三個引數, 指定 BITFIELD 命令在執行自增或者自減操作時, 碰上向上溢位(overflow)或者向下溢位(underflow)情況時的行為:
WRAP : 使用回繞(wrap around)方法處理有符號整數和無符號整數的溢位情況, 對于無符號整數來說, 回繞就像使用數值本身與能夠被儲存的最大無符號整數執行取模計算, 這也是 C 語言的標準行為, 對于有符號整數來說, 上溢將導致數字重新從最小的負數開始計算, 而下溢將導致數字重新從最大的正數開始計算, 比如說, 如果我們對一個值為 127 的 i8 整數執行加一操作, 那么將得到結果 -128 ,
SAT : 使用飽和計算(saturation arithmetic)方法處理溢位, 也即是說, 下溢計算的結果為最小的整數值, 而上溢計算的結果為最大的整數值, 舉個例子, 如果我們對一個值為 120 的 i8 整數執行加 10 計算, 那么命令的結果將為 i8 型別所能儲存的最大整數值 127 , 與此相反, 如果一個針對 i8 值的計算造成了下溢, 那么這個 i8 值將被設定為 -127 ,
FAIL : 在這一模式下, 命令將拒絕執行那些會導致上溢或者下溢情況出現的計算, 并向用戶回傳空值表示計算未被執行,
需要注意的是, OVERFLOW 子命令只會對緊隨著它之后被執行的 INCRBY 命令產生效果, 這一效果將一直持續到與它一同被執行的下一個 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 在一般情況下都是一個快速的命令, 需要注意的是, 訪問一個長度較短的字串的遠端二進制位將引發一次記憶體分配操作, 這一操作花費的時間可能會比命令訪問已有的字串花費的時間要長,
二進制位的排列:
BITFIELD 把位圖第一個位元組偏移量 0 上的二進制位看作是 most significant 位, 以此類推, 舉個例子, 如果我們對一個已經預先被全部設定為 0 的位圖進行設定, 將它在偏移量 7 的值設定為 5 位無符號整數值 23 (二進制位為 10111 ), 那么命令將生產出以下這個位圖表示:

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

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

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/252981.html

標籤:其它

上一篇:Geo命令

下一篇:TTL 生存時間

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more