本篇文章是redis的實戰篇,介紹一下使用redis+bitmap實現億級海量數據統計的方法,希望對大家有所幫助!
在移動應用的業務場景中,我們需要保存這樣的信息:一個 key 關聯了一個數據集合。【相關推薦:redis】
常見的場景如下:
- 給一個 userId ,判斷用戶登陸狀態;
- 顯示用戶某個月的簽到次數和首次簽到時間;
- 兩億用戶最近 7 天的簽到情況,統計 7 天內連續簽到的用戶總數;
通常情況下,我們面臨的用戶數量以及訪問量都是巨大的,比如百萬、千萬級別的用戶數量,或者千萬級別、甚至億級別的訪問信息。
所以,我們必須要選擇能夠非常高效地統計大量數據(例如億級)的集合類型。
如何選擇合適的數據集合,我們首先要了解常用的統計模式,并運用合理的數據了性來解決實際問題。
四種統計類型:
-
二值狀態統計;
-
聚合統計;
-
排序統計;
-
基數統計。
本文將由二值狀態統計類型作為實戰篇系列的開篇,文中將用到 redis 以外的拓展數據類型 Bitmap 來實現。
文章涉及到的指令可以通過在線 redis 客戶端運行調試,地址:redis
寄語
多分享多付出,前期多給別人創造價值并且不計回報,從長遠來看,這些付出都會成倍的回報你。特別是剛開始跟別人合作的時候,不要去計較短期的回報,沒有太大意義,更多的是鍛煉自己的視野、視角以及解決問題的能力。
二值狀態統計
碼哥,什么是二值狀態統計呀?
也就是集合中的元素的值只有 0 和 1 兩種,在簽到打卡和用戶是否登陸的場景中,只需記錄簽到(1)或 未簽到(0),已登錄(1)或未登陸(0)。
假如我們在判斷用戶是否登陸的場景中使用 Redis 的 String 類型實現(key -> userId,value -> 0 表示下線,1 – 登陸),假如存儲 100 萬個用戶的登陸狀態,如果以字符串的形式存儲,就需要存儲 100 萬個字符串了,內存開銷太大。
碼哥,為什么 String 類型內存開銷大?
String 類型除了記錄實際數據以外,還需要額外的內存記錄數據長度、空間使用等信息。
當保存的數據包含字符串,String 類型就使用簡單動態字符串(SDS)結構體來保存,如下圖所示:
- len:占 4 個字節,表示 buf 的已用長度。
- alloc:占 4 個字節,表示 buf 實際分配的長度,通常 > len。
- buf:字節數組,保存實際的數據,Redis 自動在數組最后加上一個 “ 久久久久久久综合综合狠狠| 午夜久久久久久禁播电影| 久久久久国产一级毛片高清版| 欧美亚洲另类久久综合| 亚洲欧美国产精品专区久久 | 久久久久婷婷| 亚洲精品乱码久久久久66| 日产精品久久久一区二区| 97超级碰碰碰碰久久久久| 久久无码AV一区二区三区| 国产精品久久久久久| 久久亚洲精品无码aⅴ大香| 久久婷婷综合中文字幕| 一本久久a久久精品亚洲| 久久精品亚洲男人的天堂| 久久久噜噜噜久久熟女AA片| 亚州日韩精品专区久久久| 国产精品久久波多野结衣| 久久久久亚洲精品日久生情 | 日韩久久久久中文字幕人妻| 2020久久精品国产免费| 伊人久久大香线蕉AV色婷婷色| 理论片午午伦夜理片久久 | 久久精品人人做人人爽电影| 99久久国产免费福利| 人妻无码中文久久久久专区| 久久婷婷色综合一区二区| 久久精品女人天堂AV麻| 国产三级精品久久| 久久精品国产一区二区电影| 久久se精品一区二区影院| 久久国产精品一区二区| 久久久久一区二区三区| 国产成人香蕉久久久久| 精品久久久久久无码国产| 久久男人中文字幕资源站| 久久久久无码精品| 日韩欧美亚洲综合久久 | 久久久久久九九99精品| 久久久久女人精品毛片| 国产一级做a爰片久久毛片|