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

成都網(wǎng)站設(shè)計、成都做網(wǎng)站的關(guān)注點不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)公司一個展示的機(jī)會來證明自己,這并不會花費(fèi)您太多時間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗,一切以用戶為中心。
上篇文章我們對STRING數(shù)據(jù)類型中一些基本的命令進(jìn)行了介紹,但是沒有涉及到BIT相關(guān)的命令,本文我們就來看看幾個和BIT相關(guān)的命令。
BIT相關(guān)的命令是指BITCOUNT/BITFIELD/BITOP/BITPOS/SETBIT/GETBIT 幾個命令,靈活使用這幾個命令,可以給我們的項目帶來很多驚喜。
在學(xué)習(xí)這幾個命令之前,我們得先了解下redis中字符串的存儲方式,redis中的字符串都是以二進(jìn)制的方式進(jìn)行存儲的,比如說我執(zhí)行如下命令:
127.0.0.1:6379> SET k1 a OK
a對應(yīng)的ASCII碼是97,轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)是01100001,我們BIT相關(guān)命令都是對這個二進(jìn)制數(shù)據(jù)進(jìn)行操作。請繼續(xù)往下看。
GETBIT命令可以返回key對應(yīng)的value在offset處的bit值,以上文提到的k1為例,a對應(yīng)的二進(jìn)制數(shù)據(jù)是01100001,所以當(dāng)offset為0時,對應(yīng)的bit值為0;offset為1時,對應(yīng)的bit值為1;offset為2時,對應(yīng)的bit值為1;offset為3時,對應(yīng)的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可以用來修改二進(jìn)制數(shù)據(jù),比如a對應(yīng)的ASCII碼為97,c對應(yīng)的ASCII碼為99,97轉(zhuǎn)為二進(jìn)制是01100001,99轉(zhuǎn)為二進(jìn)制是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中存儲的字符也就變?yōu)榱薱。SETBIT在執(zhí)行時所返回的數(shù)字,表示該位上原本的bit值。
BITCOUNT可以用來統(tǒng)計這個二進(jìn)制數(shù)據(jù)中1的個數(shù),如下:
127.0.0.1:6379> BITCOUNT k1 (integer) 4
關(guān)于BITCOUNT,redis官網(wǎng)上有一個非常有意思的案例:用戶上線次數(shù)統(tǒng)計。節(jié)選部分原文如下:
舉個例子,如果今天是網(wǎng)站上線的第 100 天,而用戶 peter 在今天閱覽過網(wǎng)站,那么執(zhí)行命令 SETBIT peter 100 1 ;如果明天 peter 也繼續(xù)閱覽網(wǎng)站,那么執(zhí)行命令 SETBIT peter 101 1 ,以此類推。 當(dāng)要計算 peter 總共以來的上線次數(shù)時,就使用 BITCOUNT 命令:執(zhí)行 BITCOUNT peter ,得出的結(jié)果就是 peter 上線的總天數(shù)。
這種統(tǒng)計方式最大的好處就是節(jié)省空間并且運(yùn)算速度快。每天占用一個bit,一年也就365個bit,10年也就10*365個bit,也就是456個字節(jié),對于這么大的數(shù)據(jù),bit的操作速度非常快。
BITOP可以對一個或者多個二進(jìn)制位串執(zhí)行并(AND)、或(OR)、異或(XOR)以及非(NOT)運(yùn)算,如下:a對應(yīng)的ASCII碼轉(zhuǎn)為二進(jìn)制是01100001,c對應(yīng)的二進(jìn)制位串是01100011。對這兩個二進(jìn)制位串分別執(zhí)行AND\OR\XOR的結(jié)果如下:
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也可以執(zhí)行NOT運(yùn)算,但是注意參數(shù)個數(shù),如下:
127.0.0.1:6379> BITOP not k3 k4 (integer) 1
這里會對k4的二進(jìn)制位串取反,將取反結(jié)果交給k3.
BITPOS用來獲取二進(jìn)制位串中第一個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
也可以在后面設(shè)置一個范圍,不過后面的范圍是字節(jié)的范圍,而不是二進(jìn)制位串的范圍。
OK,STRING中BIT相關(guān)的命令我們就介紹這么多。
以上就是Redis字符串中BIT相關(guān)命令有哪些,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:Redis字符串中BIT相關(guān)命令有哪些
瀏覽路徑:http://www.chinadenli.net/article24/iiipje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、App開發(fā)、全網(wǎng)營銷推廣、動態(tài)網(wǎng)站、域名注冊、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)