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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis BitMap适应场景

發(fā)布時間:2025/4/5 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis BitMap适应场景 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://blog.csdn.net/paul_wei2008/article/details/53366588

Bitmap以及Redis Bitmaps快速入門(Crash Course on Bitmap and Redis Bitmaps)

Bitmap(即Bitset)
? ? Bitmap是一串連續(xù)的2進制數(shù)字(0或1),每一位所在的位置為偏移(offset),在bitmap上可執(zhí)行AND,OR,XOR以及其它位操作。


位圖計數(shù)(Population Count)

? ? 位圖計數(shù)統(tǒng)計的是bitmap中值為1的位的個數(shù)。位圖計數(shù)的效率很高,例如,一個bitmap包含10億個位,90%的位都置為1,在一臺MacBook Pro上對其做位圖計數(shù)需要21.1ms。SSE4甚至有對整形(integer)做位圖計數(shù)的硬件指令。

Redis Bitmaps

? ? Redis允許使用二進制數(shù)據(jù)的Key(binary keys) 和二進制數(shù)據(jù)的Value(binary values)。Bitmap就是二進制數(shù)據(jù)的value。Redis的 setbit(key, offset, value)操作對指定的key的value的指定偏移(offset)的位置1或0,時間復(fù)雜度是O(1)。


?

一個簡單的例子:日活躍用戶

? ? 為了統(tǒng)計今日登錄的用戶數(shù),我們建立了一個bitmap,每一位標識一個用戶ID。當(dāng)某個用戶訪問我們的網(wǎng)頁或執(zhí)行了某個操作,就在bitmap中把標識此用戶的位置為1。在Redis中獲取此bitmap的key值是通過用戶執(zhí)行操作的類型和時間戳獲得的。

這個簡單的例子中,每次用戶登錄時會執(zhí)行一次redis.setbit(daily_active_users, user_id, 1)。將bitmap中對應(yīng)位置的位置為1,時間復(fù)雜度是O(1)。統(tǒng)計bitmap結(jié)果顯示有今天有9個用戶登錄。Bitmap的key是daily_active_users,它的值是1011110100100101。

? ? 因為日活躍用戶每天都變化,所以需要每天創(chuàng)建一個新的bitmap。我們簡單地把日期添加到key后面,實現(xiàn)了這個功能。例如,要統(tǒng)計某一天有多少個用戶至少聽了一個音樂app中的一首歌曲,可以把這個bitmap的redis key設(shè)計為play:yyyy-mm-dd-hh。當(dāng)用戶聽了一首歌曲,我們只是簡單地在bitmap中把標識這個用戶的位置為1,時間復(fù)雜度是O(1)。

[java]?
?

  • Redis.setbit(play:yyyy-mm-dd, user_id, 1)??


Redis.setbit(play:yyyy-mm-dd, user_id, 1)
? ? 今天聽過歌曲的用戶就是key是play:yyyy-mm-dd的bitmap的位圖計數(shù)。如果要按周或月統(tǒng)計,只要對這周或這個月的所有bitmap求并集,得出新的bitmap,在對它做位圖計數(shù)

?? 利用這些bitmap做其它復(fù)雜的統(tǒng)計也非常容易。例如,統(tǒng)計11月聽過歌曲的高級用戶(premium user):
(play:2011-11-01∪ play:2011-11-02∪ … ∪ play:2011-11-30)∩premium:2011-11

?

1億2千8百萬用戶的性能比較(Performance comparison using 128 million users)

? ? 下面的表格顯示了在1億2千8百萬用戶上完成的時間粒度為1天,一周,一個月的用戶統(tǒng)計的時間消耗比較。

轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/9314662.html

總結(jié)

以上是生活随笔為你收集整理的Redis BitMap适应场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。