Redis字符串(STRING)中BIT相關命令

      網友投稿 816 2022-05-30

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

      本文是Redis系列的第四篇文章,了解前面的文章有助于更好的理解本文:

      1.Linux上安裝Redis

      2.Redis中的五種數據類型簡介

      3.Redis字符串(STRING)介紹

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

      準備知識

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

      127.0.0.1:6379>?SET?k1?aOK

      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)?0127.0.0.1:6379>?GETBIT?k1?1(integer)?1127.0.0.1:6379>?GETBIT?k1?2(integer)?1127.0.0.1:6379>?GETBIT?k1?3(integer)?0127.0.0.1:6379>?GETBIT?k1?4(integer)?0127.0.0.1:6379>?GETBIT?k1?5(integer)?0127.0.0.1:6379>?GETBIT?k1?6(integer)?0127.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)?0127.0.0.1:6379>?GET?k1"c"

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

      BITCOUNT

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

      127.0.0.1:6379>?BITCOUNT?k1(integer)?4

      Redis字符串(STRING)中BIT相關命令

      關于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?aOK127.0.0.1:6379>?set?k2?cOK127.0.0.1:6379>?BITOP?and?k3?k1?k2(integer)?1127.0.0.1:6379>?get?k3"a"127.0.0.1:6379>?BITOP?or?k3?k1?k2(integer)?1127.0.0.1:6379>?get?k3"c"127.0.0.1:6379>?BITOP?xor?k3?k1?k2(integer)?1127.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?aOK127.0.0.1:6379>?BITPOS?k1?1(integer)?1127.0.0.1:6379>?BITPOS?k1?0(integer)?0

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

      OK,STRING中BIT相關的命令我們就介紹這么多,更多命令小伙伴們可以參考官方文檔http://www.redis.cn/commands.html。小伙伴在看官方文檔時,有什么問題歡迎留言討論。

      Redis

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:18.11 SELinux的3種策略類型
      下一篇:華為云數據庫控制臺前端基于開關的特性的交付
      相關文章
      亚洲另类视频在线观看| 亚洲激情黄色小说| 亚洲AV区无码字幕中文色| 亚洲一区二区三区无码影院| 亚洲aⅴ天堂av天堂无码麻豆 | 久久亚洲国产精品成人AV秋霞 | 亚洲Av无码专区国产乱码DVD| 久久精品国产亚洲精品| 国产亚洲美女精品久久久久| 亚洲成a人片在线观看精品| 18亚洲男同志videos网站| 亚洲女同成av人片在线观看| 中文亚洲AV片在线观看不卡| 亚洲欧洲精品成人久久曰影片 | 国产亚洲AV夜间福利香蕉149 | 亚洲成a人片在线观看久| 国产一区二区三区亚洲综合| 亚洲av无码一区二区三区人妖| 亚洲中文字幕乱码AV波多JI| 国产精品亚洲专区在线观看 | 亚洲AV无码乱码在线观看裸奔| 激情综合色五月丁香六月亚洲| 亚洲日韩精品无码专区网站| va亚洲va日韩不卡在线观看| 国产成人高清亚洲一区久久| 亚洲爆乳成av人在线视菜奈实| 亚洲国产成人久久精品99 | 亚洲国产成人久久精品99| 国产精品亚洲а∨天堂2021| 久久无码av亚洲精品色午夜| 国产成人综合亚洲| vvvv99日韩精品亚洲| 亚洲精品黄色视频在线观看免费资源 | 久久久久亚洲AV无码网站| 亚洲日韩中文字幕天堂不卡 | 亚洲色成人网站WWW永久| 久久久久亚洲精品无码系列| 亚洲国产美女福利直播秀一区二区| 亚洲精品福利你懂| 蜜臀亚洲AV无码精品国产午夜.| 亚洲精品无码久久毛片|