91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis位圖怎么用

發布時間:2021-12-20 11:37:47 來源:億速云 閱讀:118 作者:小新 欄目:大數據

小編給大家分享一下Redis位圖怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Redis也有這樣的結構名叫位圖,位圖最小的單位是bit,每個bit是由0或1構成,我們的字符串就是由很多個bit數組組成的,所以我們在使用位圖的時候是可以把一組bit轉換成字符串,也可以由字符串轉換成bit數組。

位圖基本用法

如下,“h”的ACSLL碼是0110 1000

> setbit name 1 1    #設置位圖的位置(integer) 0> setbit name 2 1(integer) 0> setbit name 4 1(integer) 0> get name          #獲取這個位圖轉換成字符串的值"h"> getbit name 1     #獲取位圖的某個位置是否有值(integer) 1> getbit name 3(integer) 0

字符串轉位圖

> set kh h       #存字符串OK> getbit kh 1    #第二個位置的bit是1(integer) 1> getbit kh 3    #第四個位置的bit是0(integer) 0

注意:如果對應位的字節是不可打印字符,redis會顯示該字符的十六進制形式。

> setbit x O 1(integer) 0> setbit x 1 1(integer) 0> get x"\xc0"
統計和查找

Redis位圖提供bitcount和bitpos指令,bitcount用來統計一定范圍內1的個數,bitpos用來查找指定范圍內出現的第一個0或者1。

這里我們需要注意的是參數start_index和end_index是字節索引,簡單的來說就是他們只能是8的倍數而不是指定值。

咱們對照下圖來看

Redis位圖怎么用

> set name helloOK127.0.0.1:6379> bitcount name    #計數所有的1的個數(integer) 21127.0.0.1:6379> bitcount name 0 1    #獲取前兩個字符出現1的個數(integer) 7127.0.0.1:6379> bitcount name 0 0    #獲取第一個字符出現1的個數(integer) 3127.0.0.1:6379> bitpos name 1    #獲取第一個1出現的位置(integer) 1127.0.0.1:6379> bitpos name 0    #獲取第一個0出現的位置(integer) 0127.0.0.1:6379> bitpos name 1 1 1    #獲取第二個字符1出現的位置(integer) 9
關于位圖批量操作

我們通過setbit和getbit指令來操作位圖都是一次操作一個位,那么有時候我們需要一次性操作多個位,如何操作呢?

在Redis3.2版本之前我們可以使用管道來一次性操作多個指令,redis給我們提供了bitfield指令,該指令有三個子指令分別是get、set、incrby它們都可以對指定位片段進行讀寫,但是最多只能處理64個連續的位,如果超過64位,就得使用多個子指令,bitfield 可以一次執行多個子指令。

Get

下面我們來看例子,還是使用上面的name=hello

字母
數值二進制
h
104
0110 1000
e101
0110 0101
l108
0110 1100
l108
0110 1100
o111
0110 1111
> bitfield name get u4 0    #第一個位開始取4個位(0110),結果為無符號數(u)(integer) 6> bitfield name get u3 2    #第三個位開始取3個位(101),結果為無符號數(u)(integer) 5> bitfield name get i4 0    #第一個位開始取4個位(0110),結果為有符號數(i)(integer) 6> bitfield name get i3 2    #第三個位開始取3個位(101),結果為有符號數(i)(integer) -3

下面我們才試試批處理

> bitfield name get u4 0 get u3 2 get i4 0 get i3 2(integer) 6(integer) 5(integer) 6(integer) -3

有符號數是指獲取的位數組中第一個位是符號位,剩下的才是值。如果第一位是1,那就是負數。無符號數表示非負數,沒有符號位,獲取的位數組全部都是值。有符號數最多可以獲取 64 位,無符號數只能獲取 63 位(因為 Redis 協議中的integer是有符號數,最大 64 位,不能傳遞 64 位無符號值)。

Set  

下面我們來使用set,把hello的e變成a,a的ASCLL碼是97

>bitfield name set u8 8 97    #從第八位開始,接下來的8位用無符號的ASCLL碼97代替(integer)101 >get name"hallo"
Incrby

這個指令用來自增,如果自增到最大值的時候會溢出,如果是無符號那么就變成0,如果是有符號的就會變成負數,向下自增反之。

bitfield指令提供溢出策略的指令overflow,用戶可以指定類型,默認為:wrap,溢出及折返,還可以選擇失敗:fail,失敗不執行,截斷:sat,溢出就停留。

> bitfield name incrby u4 2 1    #從第三個位開始,對接下來的4位元符號數+ 1(integer) 11> bitfield name incrby u4 2 1(integer) 12> bitfield name incrby u4 2 1(integer) 13> bitfield name incrby u4 2 1(integer) 14> bitfield name incrby u4 2 1(integer) 15####sat> bitfield name overflow sat incrby u4 2 1    #保持最大值(integer) 15####fail> bitfield name overflow fail incrby u4 2 1    #不執行(nil)####wrap> bitfield name incrby u4 2 1    #溢出折返(integer) 0

以上是“Redis位圖怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金山区| 军事| 五台县| 高淳县| 襄汾县| 治多县| 自治县| 隆回县| 登封市| 当雄县| 栾川县| 平南县| 玉树县| 七台河市| 织金县| 洪洞县| 长顺县| 江达县| 巨鹿县| 洛阳市| 汶上县| 彭州市| 开平市| 龙里县| 临桂县| 福清市| 丰镇市| 化隆| 通道| 静海县| 桃园县| 小金县| 灵山县| 七台河市| 玛沁县| 冷水江市| 扬州市| 大关县| 延吉市| 景东| 舟山市|