對redis中setbit命令的理解

2021-08-17 09:02:34 字數 905 閱讀 6303

這個是setbit使用方法的簡單說明

在redis中,儲存的字串都是以二級制的進行存在的。

舉例:設定乙個 key-value ,鍵的名字叫「andy」 值為字元'a'

我們知道 'a' 的ascii碼是 97。轉換為二進位制是:01100001。offset的學名叫做「偏移」 。二進位制中的每一位就是offset值啦,比如在這裡 offset 0 等於 『0』 ,offset 1等於'1' ,offset2等於'1',offset 6 等於'0' ,沒錯,offset是從左往右計數的,也就是從高位往低位。

我們通過setbit 命令將 andy中的 'a' 變成 'b' 應該怎麼變呢?

也就是將 01100001 變成 01100010 (b的ascii碼是98),這個很簡單啦,也就是將'a'中的offset 6從0變成1,將offset 7 從1變成0 。

大家可能也發現了,每次setbit完畢之後,有乙個(integer) 0或者(integer)1的返回值,這個是在你進行setbit 之前,該offset位的位元值。

這個時候,我們再get andy 一下,看看結果:

果然,就從'a' 變成 'b'了。 

這就是redis 中 「setbit」 的基本用法。

bitcount 就是統計字串的二級製碼中,有多少個'1'。 所以在這裡,

bitcount andy 得到的結果就是 3 啦

redis 利用setbit實現活躍使用者統計

setbit 的偏移量是從左第0位開始計數 場景 1億個使用者,每個使用者登陸 做任意操作 記為 今天活躍,否則記為不活躍 每週評出 有獎活躍使用者 連續7天活動 每月評,等等.用 位圖法 bit map 利用每個使用者的id號做offset偏移設定為1 log0721 011001.0 log07...

redis10 Setbit 的實際應用

setbit 的實際應用 場景 1億個使用者,每個使用者 登陸 做任意操作 記為 今天活躍,否則記為不活躍 每週評出 有獎活躍使用者 連續7天活動,每月評,等等。思路 userid dt active 12013 07 2711 2013 0726 1如果是放在表中,1 表急劇增大,2 要用grou...

Oracle 中設定位的值函式SETBIT(原創)

oracle 自帶位與函式bitand。但是大家可能需要的是設定某位為1或0。ococo 2008.11.28 create or replace function setbit val number,bitpos in number,bitval in number return number i...