本篇文章是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 自動在數組最后加上一個 “ 一本色道久久99一综合| 久久久久久久97| 99久久国产综合精品成人影院| 久久精品麻豆日日躁夜夜躁| 久久精品国产免费一区| 亚洲v国产v天堂a无码久久| 国内精品九九久久精品| 狠狠色丁香婷综合久久| 欧美精品一区二区久久| 久久99精品久久久久久久不卡| 久久国产高潮流白浆免费观看| 狠狠色伊人久久精品综合网| 99久久99久久精品国产片果冻| 久久久婷婷五月亚洲97号色 | 精品无码久久久久久尤物| 精品乱码久久久久久夜夜嗨| 中文字幕精品久久| 国产精品99久久久久久董美香 | 99久久伊人精品综合观看| 久久AAAA片一区二区| 狠狠色婷婷久久综合频道日韩| 欧美综合天天夜夜久久| 日本人妻丰满熟妇久久久久久| 日韩欧美亚洲国产精品字幕久久久| 久久精品无码午夜福利理论片| 久久婷婷午色综合夜啪| 久久国产精品无码网站| 久久亚洲国产欧洲精品一| 久久国产色AV免费观看| 久久精品国产99国产精品导航| 久久精品国产欧美日韩| 国产精品亚洲综合专区片高清久久久 | 97香蕉久久夜色精品国产| 久久综合欧美成人| 久久国产一区二区| 国产麻豆精品久久一二三| 久久亚洲精精品中文字幕| 亚洲精品乱码久久久久久中文字幕| 亚洲国产精品成人久久蜜臀| 久久久久久久久久免免费精品| 精品99久久aaa一级毛片|