Redis資料型別之Bitmaps

2021-10-25 07:53:43 字數 3149 閱讀 7846

bitmaps最大的優點是:可以節省大量空間。例如,在以增量使用者id表示不同使用者的系統中,僅使用512 mb記憶體就可以記住40億使用者的一位資訊(例如,知道使用者是否要接收新聞通訊)。

凡是只有兩個狀態的資料都可以用bitmaps儲存,最後用來統計,比如活躍使用者和不活躍使用者,登入和未登入,打卡和未打卡

(integer) 0

127.0.0.1:6379> setbit online:user 1 0

(integer) 0

127.0.0.1:6379> setbit online:user 2 0

(integer) 0

127.0.0.1:6379> setbit online:user 2 2 # 只能設定0或1,否則報錯

(error) err bit is not an integer or out of range

127.0.0.1:6379> getbit online:user 0

(integer) 1

127.0.0.1:6379> getbit online:user 1

(integer) 0

127.0.0.1:6379> getbit online:user 2

(integer) 0

127.0.0.1:6379> bitcount online:user

(integer) 1

127.0.0.1:6379> bitcount online:user 0 -1

(integer) 1

127.0.0.1:6379> setbit online:user 3 1

(integer) 0

127.0.0.1:6379> bitcount online:user 0 -1

(integer) 2

127.0.0.1:6379> bitpos online:user 0

(integer) 1 # 0第一次出現在下標為1的位置

127.0.0.1:6379> bitpos online:user 1

(integer) 0 # 1第一次出現在下標為0的位置

127.0.0.1:6379> setbit key 0 1 # 第0個位元組第乙個位

(integer) 0

127.0.0.1:6379> setbit key 1 1

(integer) 0

127.0.0.1:6379> setbit key 2 1

(integer) 0

127.0.0.1:6379> setbit key 3 0

(integer) 0

127.0.0.1:6379> setbit key 4 0

(integer) 0

127.0.0.1:6379> setbit key 5 1

(integer) 0

127.0.0.1:6379> setbit key 6 1

(integer) 0

127.0.0.1:6379> setbit key 7 1 # 第0個位元組第八個位

(integer) 0

127.0.0.1:6379> setbit key 8 1 # 第1個位元組第乙個位

(integer) 0

127.0.0.1:6379> setbit key 9 1

(integer) 0

127.0.0.1:6379> setbit key 10 0

(integer) 0

127.0.0.1:6379> bitpos key 0

(integer) 3

127.0.0.1:6379> bitpos key 0 0 1 # 0-1位元組可以在第0個位元組中找到

(integer) 3

127.0.0.1:6379> bitpos key 0 1 2 # 1-2位元組可以在第1個位元組中找到

(integer) 10

127.0.0.1:6379> bitpos key 0 2 3 # 找不到,總共只有1byte+3bit

(integer) -1

127.0.0.1:6379> setbit key1 0 0

(integer) 0

127.0.0.1:6379> setbit key1 1 1 # key1 01

(integer) 0

127.0.0.1:6379> setbit key2 0 1

(integer) 0

127.0.0.1:6379> setbit key2 1 1 # key2 11

(integer) 0

127.0.0.1:6379> bitop and andres key1 key2 # key1 & key2 01

(integer) 1

127.0.0.1:6379> getbit andres 0

(integer) 0

127.0.0.1:6379> getbit andres 1

(integer) 1

127.0.0.1:6379> bitop or orres key1 key2 # key1 | key2 11

(integer) 1

127.0.0.1:6379> getbit orres 0

(integer) 1

127.0.0.1:6379> getbit orres 1

(integer) 1

127.0.0.1:6379> bitop not notres key1 # !key1 10

(integer) 1

127.0.0.1:6379> getbit notres 0

(integer) 1

127.0.0.1:6379> getbit notres 1

(integer) 0

127.0.0.1:6379> bitop xor xorres key1 key2 # 如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。

(integer) 1

127.0.0.1:6379> getbit xorres 0

(integer) 1

127.0.0.1:6379> getbit xorres 1

(integer) 0

Redis之資料型別

與mysql資料庫支援的多種資料型別相比,redis資料庫支援的資料型別要少上許多。redis資料庫支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 string 是 redis 最基本的型別,你可以理解成與 memcac...

Redis 資料型別之雜湊型別

營口小書生 2017 05 11 15 26 redis 有很多種型別,現在我們不用想太多,看此篇文章,你只需要記得你 雜湊型別 就好 雜湊型別顧名思義就是字段分開儲存的,可以自由更改值,不需要先讀取整篇內容在更改其中乙個 然後在儲存更新原有的,這樣是不是很簡單啊,還能保證資料的一致性,不用擔心改錯...

Redis資料型別之ZSet型別

有序集合 sorted set 1 redis 有序集合和集合一樣,也是string型別元素的集合,且不允許有重複的成員。2 不同的是每個元素都會關聯乙個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。3 有序集合的成員是唯一的,但分數 score 卻可以重複。4 ...