1. hash
雜湊是 redis 的一種基礎資料結構,redis 底層維護的是乙個開雜湊,會把不同的 key 對映到雜湊表上,如果是遇到關鍵字衝突,那麼就會拉出乙個鍊錶出來。
當乙個使用者訪問的時候,如果使用者登入過,那麼我們就是用使用者的 id,如果使用者沒有登入過,那麼我們也能夠前端頁面隨機生成乙個 key 用來標識使用者。
當使用者訪問的時候,我們可以使用 hset 命令,key 可以選擇 uri 與對應的日期進行拼湊,field 可以使用使用者的 id 或者隨即標識,value 可以簡單設定為 1 。
當我們要統計某乙個**某一天的訪問量的時候,就可以直接使用 hlen 來得到最終的結果了。
優點:簡單,容易實現,查詢也是非常方便,資料準確性非常高。
2. bitset
我們知道,對於乙個 32 位的 int,如果我們只用來記錄 id,那麼只能夠記錄乙個使用者,但如果我們轉成 2 進製,每位用來表示乙個使用者,那麼我們就能夠一口氣表示 32 個使用者,控制項節省了 32 倍!
對於有大量資料的場景,如果我們使用 bitset,那麼可以節省非常多的記憶體。
對於沒有登入的使用者,我們也可以使用雜湊演算法,把對應的使用者表示雜湊成乙個數字 id 。bitset 非常的節省記憶體,假設有 1 億個使用者,也只需要 100000000/8/1024/1024 約等於 12 兆記憶體。
redis 已經為我們提供了 setbit 的方法,使用起來非常的方便,我們可以看看下面的例子。
我們在 item 頁面可以不停地使用 setbit 命令,設定使用者已經訪問了該頁面,也可以使用 getbit 的方法查詢某個使用者是否訪問。最後我們通過 bitcount 可以統計該網頁每天的訪問數量。
優點:占用記憶體更小,查詢方便,可以指定查詢某個使用者,資料可能略有瑕疵,對於非登入的使用者,可能不同的 key 對映到同乙個 id,否則需要維護乙個非登入使用者的對映,有額外的開銷。
缺點:如果使用者非常的稀疏,那麼占用的記憶體可能比方法一更大。
3. 概率演算法
對於拼多多這種多個頁面都可能非常多訪問量的**,如果所需要的數量不用那麼準確,可以使用概率演算法。
事實上,我們對乙個**的 uv 的統計,1 億 跟 1 億零 30 萬其實是差不多的。
在 redis 中,已經封裝了 hyperloglog 演算法,它是一種基數評估演算法。這種演算法的特徵,一般都是資料不存具體的值,而是存用來計算概率的一些相關資料。
當使用者訪問**的時候,我們可以使用 pfadd 命令,設定對應的命令,最後我們只要通過 pfcount 就能順利計算出最終的結果,因為這個只是乙個概率演算法,所以可能存在 0.81% 的誤差。
優點:占用記憶體極小,對於乙個 key,只需要 12 kb。對於拼多多這種超多使用者的特別合適。
缺點:查詢指定使用者的時候,可能會出錯,畢竟存的不是具體的資料。總數也存在一定的誤差。
上面就是常見的 3 種適用 redis 統計**使用者訪問數的方法了。
redis統計使用者活躍數量
1。說明,redis 位圖儲存節省記憶體,使用者id 156,1333 如果使用者登入,根據日期儲存為1 setbit 20209001 156 1 id為156的使用者在1月1號登入了 setbit 20200901 1333 1 id為1333的使用者在1月1號登入了 setbit 202090...
redis 統計億級活躍使用者
使用位圖法來統計 可以用redis的setbit命令來統計 setbit bitop 1 記錄使用者登陸 每天按日期生成乙個位圖,使用者登陸後,把user id位上的bit值置為1 2 把1周的點陣圖 and 計算,位上為1的,即是連續登陸的使用者 redis 127.0.0.1 6379 setb...
如何配置Redis訪問密碼
一般為了安全,我們都會為redis設定訪問密碼。那麼如何來配置redis的訪問密碼呢?一般有如下兩種方式。方式一 這種密碼配置方式是臨時的,若redis重啟密碼就會失效 1.首先進入redis,如果沒有開啟redis則需要先開啟 root iz94jzcra1hz bin redis cli p 6...