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

溫馨提示×

溫馨提示×

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

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

Redis字符串中BIT相關命令有哪些

發布時間:2021-11-11 17:00:32 來源:億速云 閱讀:251 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關Redis字符串中BIT相關命令有哪些,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

上篇文章我們對STRING數據類型中一些基本的命令進行了介紹,但是沒有涉及到BIT相關的命令,本文我們就來看看幾個和BIT相關的命令。

BIT相關的命令是指BITCOUNT/BITFIELD/BITOP/BITPOS/SETBIT/GETBIT 幾個命令,靈活使用這幾個命令,可以給我們的項目帶來很多驚喜。

準備知識

在學習這幾個命令之前,我們得先了解下redis中字符串的存儲方式,redis中的字符串都是以二進制的方式進行存儲的,比如說我執行如下命令:

127.0.0.1:6379> SET k1 a
OK

a對應的ASCII碼是97,轉換為二進制數據是01100001,我們BIT相關命令都是對這個二進制數據進行操作。請繼續往下看。

GETBIT

GETBIT命令可以返回key對應的value在offset處的bit值,以上文提到的k1為例,a對應的二進制數據是01100001,所以當offset為0時,對應的bit值為0;offset為1時,對應的bit值為1;offset為2時,對應的bit值為1;offset為3時,對應的bit值為0,依此類推….,如下:

127.0.0.1:6379> GETBIT k1 0
(integer) 0
127.0.0.1:6379> GETBIT k1 1
(integer) 1
127.0.0.1:6379> GETBIT k1 2
(integer) 1
127.0.0.1:6379> GETBIT k1 3
(integer) 0
127.0.0.1:6379> GETBIT k1 4
(integer) 0
127.0.0.1:6379> GETBIT k1 5
(integer) 0
127.0.0.1:6379> GETBIT k1 6
(integer) 0
127.0.0.1:6379> GETBIT k1 7
(integer) 1

SETBIT

SETBIT可以用來修改二進制數據,比如a對應的ASCII碼為97,c對應的ASCII碼為99,97轉為二進制是01100001,99轉為二進制是01100011,兩個的差異在于第六位一個是0一個是1,通過SETBIT命令,我們可以將k1的第六位的0改為1(第六位是從0開始算),如下:

127.0.0.1:6379> SETBIT k1 6 1
(integer) 0
127.0.0.1:6379> GET k1
"c"

此時,k1中存儲的字符也就變為了c。SETBIT在執行時所返回的數字,表示該位上原本的bit值。

BITCOUNT

BITCOUNT可以用來統計這個二進制數據中1的個數,如下:

127.0.0.1:6379> BITCOUNT k1
(integer) 4

關于BITCOUNT,redis官網上有一個非常有意思的案例:用戶上線次數統計。節選部分原文如下:

舉個例子,如果今天是網站上線的第 100 天,而用戶 peter 在今天閱覽過網站,那么執行命令 SETBIT peter 100 1 ;如果明天 peter 也繼續閱覽網站,那么執行命令 SETBIT peter 101 1 ,以此類推。
當要計算 peter 總共以來的上線次數時,就使用 BITCOUNT 命令:執行 BITCOUNT peter ,得出的結果就是 peter 上線的總天數。

這種統計方式最大的好處就是節省空間并且運算速度快。每天占用一個bit,一年也就365個bit,10年也就10*365個bit,也就是456個字節,對于這么大的數據,bit的操作速度非常快。

BITOP

BITOP可以對一個或者多個二進制位串執行并(AND)、或(OR)、異或(XOR)以及非(NOT)運算,如下:a對應的ASCII碼轉為二進制是01100001,c對應的二進制位串是01100011。對這兩個二進制位串分別執行AND\OR\XOR的結果如下:

127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> set k2 c
OK
127.0.0.1:6379> BITOP and k3 k1 k2
(integer) 1
127.0.0.1:6379> get k3
"a"
127.0.0.1:6379> BITOP or k3 k1 k2
(integer) 1
127.0.0.1:6379> get k3
"c"
127.0.0.1:6379> BITOP xor k3 k1 k2
(integer) 1
127.0.0.1:6379> get k3
"\x02"

另外,BITOP也可以執行NOT運算,但是注意參數個數,如下:

127.0.0.1:6379> BITOP not k3 k4
(integer) 1

這里會對k4的二進制位串取反,將取反結果交給k3.

BITPOS

BITPOS用來獲取二進制位串中第一個1或者0的位置,如下:

127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> BITPOS k1 1
(integer) 1
127.0.0.1:6379> BITPOS k1 0
(integer) 0

也可以在后面設置一個范圍,不過后面的范圍是字節的范圍,而不是二進制位串的范圍。

OK,STRING中BIT相關的命令我們就介紹這么多。

以上就是Redis字符串中BIT相關命令有哪些,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

徐汇区| 波密县| 崇文区| 吴川市| 屏边| 毕节市| 紫金县| 仁化县| 鄱阳县| 嵊泗县| 长兴县| 柞水县| 博白县| 高青县| 洞头县| 安岳县| 交口县| 龙门县| 思南县| 定州市| 南京市| 确山县| 营山县| 石林| 乌恰县| 漳州市| 张家港市| 张北县| 山东| 吴忠市| 临泽县| 府谷县| 礼泉县| 万宁市| 宿迁市| 辽宁省| 策勒县| 苍梧县| 余江县| 阿尔山市| 精河县|