Redis bitmap使用场景示例
bitmap兩個應用場景:
setbit命令:
offset:是二進制位的偏移量,而不是字節數組。一個字節有8個二進制位
將k1的第一個(索引為0)二進制位設置為1:
在ASCII碼表中,01000000剛好就是@:
將k1的第八個(索引為7)二進制位設置為1:01000001對應的就是A
使用man ascii來驗證:
將第十個二進制位(索引為9)的值設置為1:得到的結果將是A@,就是將兩個字節按照ASCII表分別轉換為字符后拼接起來
setbit k2 1 1
setbit k2 6 1
得到'B'
將k1和k2進行與運算:與運算,遇0則0,全為1則為1
將k1和k2進行或運算:或運算,遇1則1,全為0則為0
bitmap的應用場景一:
統計用戶的登錄天數,且窗口隨機。
460M能存儲1000萬用戶全年365天的登錄明細:365/8=46B(字節)
(01,02,03,04為日期;sean,json為用戶id)
比如:用戶sean第2天登錄過,第8天,第365天登錄過:
統計一個用戶一年內的登錄天數頂多需要46字節:
計算用戶sean最后兩周的登錄天數:(最后一周是-1,倒數第二周是-2),結果是1次
bitcount 統計的是1的個數 ?bitcount test 0 -1 就是所有的 ?bitcount 0 0 那么就應該是第一個字節中1的數量的
正反向索引:
統計活躍用戶數:以登錄日期為key;重復登錄要去重;進行or或運算(有1則1);
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Redis bitmap使用场景示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM 调优实战--内存溢出的定位和MA
- 下一篇: jdk8 List集合 Stream d