Redis字串 STRING 中BIT相關命令

2021-09-29 22:36:50 字數 1898 閱讀 5328

bit相關的命令是指bitcount/bitfield/bitop/bitpos/setbit/getbit 幾個命令,靈活使用這幾個命令,可以給我們的專案帶來很多驚喜。

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

a對應的ascii碼是97,轉換為二進位制資料是01100001,我們bit相關命令都是對這個二進位制資料進行操作。請繼續往下看。

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

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

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

bitcount可以用來統計這個二進位制資料中1的個數,如下:

關於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可以對乙個或者多個二進位制位串執行並(and)、或(or)、異或(xor)以及非(not)運算,如下:a對應的ascii碼轉為二進位制是01100001,c對應的二進位制位串是01100011。對這兩個二進位制位串分別執行and\or\xor的結果如下:

另外,bitop也可以執行not運算,但是注意引數個數,如下:

127.0.0.1:6379> bitop not k3 k4

(integer) 1

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

也可以在後面設定乙個範圍,不過後面的範圍是位元組的範圍,而不是二進位制位串的範圍。

1.centos 7.x 安裝redis

2.redis中的五種資料型別以及key的相關命令簡介

3.redis字串(string)的操作命令

參考:官方文件  

Redis字串 STRING 中BIT相關命令

1.linux上安裝redis 2.redis中的五種資料型別簡介 3.redis字串 string 介紹 bit相關的命令是指bitcount bitfield bitop bitpos setbit getbit 幾個命令,靈活使用這幾個命令,可以給我們的專案帶來很多驚喜。在學習這幾個命令之前,...

Redis字串 STRING 中BIT相關命令

上篇文章我們對string資料型別中一些基本的命令進行了介紹,但是沒有涉及到bit相關的命令,本文我們就來看看幾個和bit相關的命令。1.linux上安裝redis 2.redis中的五種資料型別簡介 3.redis字串 string 介紹 bit相關的命令是指bitcount bitfield b...

Redis系列 字串 String (六)

redis 字串資料型別的相關命令用於管理 redis 字串值,基本語法如下 redis 127.0 0.1 6379 command key nameredis 127.0 0.1 6379 set runoobkey redis okredis 127.0 0.1 6379 get runoob...