日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

redis 中一个字段 修改map_Redis bitmap 位图 从入门到精通 基础 实战 妙用

發布時間:2023/12/19 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 中一个字段 修改map_Redis bitmap 位图 从入门到精通 基础 实战 妙用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.bitmap介紹

位圖不是真正的數據類型,它是定義在字符串類型中,一個字符串類型的值最多能存儲512M字節的內容

位上限:2^(9(512)+10(1024)+10(1024)+3(8b=1B))=2^32b

2.setbit設置某一位上的值

語法:SETBIT key offset value (offset位偏移量,從0開始)

geekmooc:6379> flushall

OK

geekmooc:6379> setbit k1 1 1

0

geekmooc:6379> get k1

@

geekmooc:6379> setbit k1 7 1

0

geekmooc:6379> get k1

A

geekmooc:6379> setbit k1 7 2

ERR bit is not an integer or out of range

geekmooc:6379> setbit k1 9 1

0

geekmooc:6379> get k1

A@

3.getbit 獲取某一位上的值

語法:GETBIT key offset

geekmooc:6379> getbit k1 7

1

geekmooc:6379> getbit k1 8

0

geekmooc:6379> getbit k1 1

1

4.bitpos返回指定值0或者1在指定區間上首次出現的下標

語法:BITPOS key bit [start] [end](字節索引,0表示第一個字節)summary: Find first bit set or clear in a string

since: 2.8.7

group: string

不指定查找范圍,表示從全部內容中查找:BITPOS key bit

geekmooc:6379> keys *

k1

geekmooc:6379> bitpos k1 1

1

geekmooc:6379> setbit k1 1 0

1

geekmooc:6379> bitpos k1 1

7

geekmooc:6379> setbit k1 7 0

1

geekmooc:6379> bitpos k1 1

9

指定查找范圍:BITPOS key bit start :從start+1個字節開始查找,直到尾部

BITPOS key bit start end:從start+1字節開始到end+1字節之間查找

然后將數據還原:

geekmooc:6379> setbit k1 1 1

0

geekmooc:6379> setbit k1 7 1

0

查找演示:

geekmooc:6379> bitpos k1 1 0 0

1 #在第一個字節中查找1首次出現的下標

geekmooc:6379> bitpos k1 1 0

1 #從第一個字節到值得最后一個字節查找1首次出現的下標

geekmooc:6379> setbit k1 1 0

1 #將指定下標的值改為0

geekmooc:6379> bitpos k1 1 0 0

7 #

geekmooc:6379> bitpos k1 1 0

7

geekmooc:6379> setbit k1 7 0

1

geekmooc:6379> bitpos k1 1 0 0

-1 #在第一個字節中沒有找到1,則返回-1

geekmooc:6379> bitpos k1 1 0

9 #從第一個字節到值得最后一個字節查找

geekmooc:6379> bitpos k1 1 0 1

9 #在第1和第2個字節總找1首次出現的位置

geekmooc:6379> bitpos k1 1 0 2

9 #在第1到第3個字節查找1首次出現的位置,但數據總共2(小于end對應的3)個字節,不會拋錯。

5.bitop位操作

語法:BITOP operation destkey key [key ...]summary: Perform bitwise operations between strings

since: 2.6.0

group: string

對一個或多個保存二進制位的字符串 key 進行位操作,并將結果保存到 destkey 上。operation 可以是 AND 、 OR 、 NOT 、 XOR 這四種操作中的任意一種

BITOP AND destkey key [key ...] ,對一個或多個 key 求邏與,并將結果保存到 destkey

BITOP OR destkey key [key ...] ,對一個或多個 key 求邏輯或,并將結果保存到 destkey

BITOP XOR destkey key [key ...] ,對一個或多個 key 求邏輯異或,并將結果保存到 destkey

BITOP NOT destkey key ,對給定 key 求邏輯非,并將結果保存到 destkey

除了 NOT 操作之外,其他操作都可以接受一個或多個 key 作為輸入,當 BITOP 處理不同長度的字符串時,較短的那個字符串所缺少的部分會被看作 0,空的 key 也被看作是包含 0 的字符串序列

BITOP AND destkey key [key ...]演示:

geekmooc:6379> flushall

OK

geekmooc:6379> keys *

(empty list or set)

geekmooc:6379> setbit k1 1 1

(integer) 0

geekmooc:6379> setbit k2 7 1

(integer) 0

geekmooc:6379> bitop and k3 k1 k2

(integer) 1

geekmooc:6379> get k3

"\x00"全1為1,不全1為0

BITOP OR destkey key [key ...]演示

geekmooc:6379> bitop or k4 k1 k2

(integer) 1

geekmooc:6379> get k4

"A"

全0為0,不全0為1

BITOP XOR destkey key [key ...]

geekmooc:6379> bitop xor k5 k1 k2

(integer) 1

geekmooc:6379> get k5

"A"不同為1,相同為0

geekmooc:6379> bitop not k6 k1

(integer) 1

geekmooc:6379> get k6

"\xbf"按位取反

6.bitcount

統計指定位區間上值為1的個數BITCOUNT key [start] [end] start end 字節的索引 正方向

從左向右從0開始,注意官方start、end是位,測試后是字節

geekmooc:6379> get k1

"@"

geekmooc:6379> bitcount k1

(integer) 1

geekmooc:6379> setbit k1 7 1

(integer) 0

geekmooc:6379> bitcount k1

(integer) 2

geekmooc:6379> setbit k1 9 1

(integer) 0

geekmooc:6379> bitcount k1

(integer) 3 #統計全部的1的總數

geekmooc:6379> bitcount k1 0 0

(integer) 2 #統計第一個字節中1出現的總數

geekmooc:6379> bitcount k1 0 1

(integer) 3 #統計第0+1到第1+1字節中1出現的總數BITCOUNT key [start] [end] start end 字節的索引 負方向

從右向左從-1開始,注意官方start、end是位,測試后是字節

geekmooc:6379>BITCOUNT k1 0 -1 #等同于BITCOUNT k1

(integer) 3

最常用的就是 BITCOUNT k1

7.Redis的二進制位

geekmooc:6379> set k7 ab

OK

geekmooc:6379> get k7

"ab"

geekmooc:6379> bitcount k7

(integer) 6

geekmooc:6379> bitcount k7 0 0

(integer) 3

geekmooc:6379> bitcount k7 1 1

(integer) 3

geekmooc:6379> set k8 中

OK

geekmooc:6379> bitcount k8

(integer) 13

geekmooc:6379> get k8

"\xe4\xb8\xad"如果是GBK環境下,如下圖

8.Bitmap應用場景

網站用戶簽到的天數統計

用戶ID為key,天作為offset,上線置為1 366> 000000000000000

366 /8=46Byte ID為18的用戶,今年的第1天簽到、第30天簽到

geekmooc:6379[2]> setbit u18 1 1

(integer) 0

geekmooc:6379[2]> setbit u18 30 1

(integer) 0

geekmooc:6379[2]> bitcount u18 #統計id為18的用戶簽到總次數

(integer) 2

geekmooc:6379[2]> keys u*

1) "u18"

按天統計網站活躍用戶

天作為key,用戶ID為offset,上線置為1

求一段時間內活躍用戶數 5000 0000 / 8*366= 6.3MB=*366 (五千萬活躍用戶1年才產生2GB左右的數據)

geekmooc:6379>SETBIT 20190601 5 1 #0000 0100

geekmooc:6379>SETBIT 20190602 7 1 #0000 0001

geekmooc:6379>SETBIT 20190603 7 1 #0000 0001

求6月1日到6月10日的活躍用戶數

geekmooc:6379>BITOP OR users 20190601 20190602 20190603 ... 20190610

geekmooc:6379>BITCOUNT users #目標key為users

結果為2

用戶在線狀態、在線人數統計

geekmooc:6379> SETBIT online 5 1 #0000 0100 上線為1

(integer) 0

geekmooc:6379> SETBIT online 7 1 #0000 0101

(integer) 0

geekmooc:6379> bitcount online #當前在線人數

(integer) 2

geekmooc:6379> SETBIT online 7 0

(integer) 1

geekmooc:6379> bitcount online #當前在線人數

(integer) 1Redis bitmap 位圖 從入門到精通 基礎 實戰 妙用?www.geekmooc.cn

總結

以上是生活随笔為你收集整理的redis 中一个字段 修改map_Redis bitmap 位图 从入门到精通 基础 实战 妙用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。