精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

學透 Redis HyperLogLog,看這篇就夠了

數據庫 Redis
HyperLogLog 是一種概率數據結構,用于估計集合的基數。每個 HyperLogLog 最多只需要花費 12KB 內存,在標準誤差 0.81%的前提下,就可以計算 2 的 64 次方個元素的基數。

在移動互聯網的業務場景中,數據量很大,系統需要保存這樣的信息:一個 key 關聯了一個數據集合,同時對這個數據集合做統計做一個報表給運營人員看。

比如。

  • 統計一個 APP 的日活、月活數。
  • 統計一個頁面的每天被多少個不同賬戶訪問量(Unique Visitor,UV)。
  • 統計用戶每天搜索不同詞條的個數。
  • 統計注冊 IP 數。

通常情況下,系統面臨的用戶數量以及訪問量都是巨大的,比如百萬、千萬級別的用戶數量,或者千萬級別、甚至億級別的訪問信息,咋辦呢?

?

Redis:“這些就是典型的基數統計應用場景,基數統計:統計一個集合中不重復元素,這被稱為基數。”

1、是什么

HyperLogLog 是一種概率數據結構,用于估計集合的基數。每個 HyperLogLog 最多只需要花費 12KB 內存,在標準誤差 0.81%的前提下,就可以計算 2 的 64 次方個元素的基數。

HyperLogLog 的優點在于它所需的內存并不會因為集合的大小而改變,無論集合包含的元素有多少個,HyperLogLog 進行計算所需的內存總是固定的,并且是非常少的

主要特點如下。

  • 高效的內存使用:HyperLogLog 的內存消耗是固定的,與集合中的元素數量無關。這使得它特別適用于處理大規模數據集,因為它不需要存儲每個不同的元素,只需要存儲估計基數所需的信息。
  • 概率估計:HyperLogLog 提供的結果是概率性的,而不是精確的基數計數。它通過哈希函數將輸入元素映射到位圖中的某些位置,并基于位圖的統計信息來估計基數。由于這是一種概率性方法,因此可能存在一定的誤差,但通常在實際應用中,這個誤差是可接受的。
  • 高速計算:HyperLogLog 可以在常量時間內計算估計的基數,無論集合的大小如何。這意味著它的性能非常好,不會受到集合大小的影響。

2、修煉心法

基本原理

HyperLogLog 是一種概率數據結構,它使用概率算法來統計集合的近似基數。而它算法的最本源則是伯努利過程。

伯努利過程就是一個拋硬幣實驗的過程。拋一枚正常硬幣,落地可能是正面,也可能是反面,二者的概率都是 1/2 。

伯努利過程就是一直拋硬幣,直到落地時出現正面位置,并記錄下拋擲次數k。

比如說,拋一次硬幣就出現正面了,此時 k 為 1; 第一次拋硬幣是反面,則繼續拋,直到第三次才出現正面,此時 k 為 3。

對于 n 次伯努利過程,我們會得到 n 個出現正面的投擲次數值 k1, k2 ... kn, 其中這里的最大值是 k_max。

根據一頓數學推導,我們可以得出一個結論:2^{k_ max} 來作為 n 的估計值。

也就是說你可以根據最大投擲次數近似的推算出進行了幾次伯努利過程。

所以 HyperLogLog 的基本思想是利用集合中數字的比特串第一個 1 出現位置的最大值來預估整體基數,但是這種預估方法存在較大誤差,為了改善誤差情況,HyperLogLog 中引入分桶平均的概念,計算 m 個桶的調和平均值。

Redis 內部使用字符串位圖來存儲 HyperLogLog 所有桶的計數值,一共分了 2^14 個桶,也就是 16384 個桶。每個桶中是一個 6 bit 的數組。

這段代碼描述了 Redis HyperLogLog 數據結構的頭部定義(hyperLogLog.c 中的 hllhdr 結構體)。以下是關于這個數據結構的各個字段的解釋。

struct hllhdr {
    char magic[4];
    uint8_t encoding;
    uint8_t notused[3];
    uint8_t card[8];
    uint8_t registers[];
};
  • magic[4]:這個字段是一個 4 字節的字符數組,用來表示數據結構的標識符。在 HyperLogLog 中,它的值始終為"HYLL",用來標識這是一個 HyperLogLog 數據結構。
  • encoding:這是一個 1 字節的字段,用來表示 HyperLogLog 的編碼方式。它可以取兩個值之一:
  • HLL_DENSE:表示使用稠密表示方式。
  • HLL_SPARSE:表示使用稀疏表示方式。
  • notused[3]:這是一個 3 字節的字段,目前保留用于未來的擴展,要求這些字節的值必須為零。
  • card[8]:這是一個 8 字節的字段,用來存儲緩存的基數(基數估計的值)。
  • egisters[]:這個字段是一個可變長度的字節數組,用來存儲 HyperLogLog 的數據。

Redis 對 HyperLogLog 的存儲進行了優化,在計數比較小的時候,存儲空間采用系數矩陣,占用空間很小。

只有在計數很大,稀疏矩陣占用的空間超過了閾值才會轉變成稠密矩陣,占用 12KB 空間。

3、出招實戰:網頁訪問量統計

在移動互聯網的業務場景中,數據量很大,系統需要保存這樣的信息:一個 key 關聯了一個數據集合,同時對這個數據集合做統計做一個報表給運營人員看。

比如。

  • 統計一個 APP 的日活、月活數。
  • 統計一個頁面的每天被多少個不同賬戶訪問量(Unique Visitor,UV)。
  • 統計用戶每天搜索不同詞條的個數。
  • 統計注冊 IP 數。

通常情況下,系統面臨的用戶數量以及訪問量都是巨大的,比如百萬、千萬級別的用戶數量,或者千萬級別、甚至億級別的訪問信息,咋辦呢?

使用 Set 實現

一個用戶一天內多次訪問一個網站只能算作一次,所以很容易就想到通過 Redis 的 Set 集合來實現。

比如微信昵稱叫 “Chaya” 的小姐姐訪問【愛一個人總是要掉眼淚的風險】這篇文章時,我把這個微信昵稱 “Chaya” 存到 Set 集合中。

SADD 愛一個人總是要掉眼淚的風險:uv 碼哥 Chaya 趙小因 Chaya
(integer) 3

“Chaya” 多次訪問這篇文章, Set 的去重特性保證集合中只有一個記錄。接著,通過 SCARD 命令,統計頁面 UV。指令返回這個集合的元素個數(也就是微信昵稱個數)。

SCARD 愛一個人總是要掉眼淚的風險:uv
(integer) 3

使用 HyperLogLog 實現

?

Chaya:“Set 集合雖好,如果文章非常火爆達到千萬級別,一個 Set 集合就保存了千萬個用戶的 ID,頁面多了消耗的內存也太大了。”

不要怕,只要思想不滑坡,辦法總比困難多。這些就是典型的基數統計應用場景,基數統計:統計一個集合中不重復元素的個數。

HyperLogLog 的優點在于它所需的內存并不會因為集合的大小而改變,無論集合包含的元素有多少個,HyperLogLog 進行計算所需的內存總是固定的,并且是非常少的。

每個 HyperLogLog 最多只需要花費 12KB 內存,在標準誤差 0.81%的前提下,就可以計算 2 的 64 次方個元素的基數。

HyperLogLog 使用太簡單了。PFADD、PFCOUNT、PFMERGE三個指令打天下。

PFADD

每訪問一次頁面,調用 PFADD 指令 將這個用戶 ID 添加到 HyperLogLog 中。如下 一共有三個用戶訪問了這頁面,其中 Chaya 訪問了兩次,但只算一次。

PFADD 愛一個人總是要掉眼淚的風險:uv 碼哥 Chaya 趙小因 Chaya

如果執行命令后 HyperLogLog 估計的近似基數發生變化,PFADD則返回 1,否則返回 0。如果指定的鍵不存在,該命令會自動創建一個空的 HyperLogLog 結構。

pfadd 命令并不會一次性分配 12k 內存,而是隨著基數的增加而逐漸增加內存分配。

PFCOUNT

接下來,通過 PFCOUNT 指令獲取文章【愛一個人總是要掉眼淚的風險】的 UV 值,可以看到返回值是 3 ,符合預期。

> PFCOUNT 愛一個人總是要掉眼淚的風險:uv
3

PFMERGE 合并統計

?

Chaya:“還有一個變態需求,對文章進行標簽分類,運營說要把都是情感文章標簽的幾個頁面數據合并統計。”

其中頁面的 UV 訪問量也需要合并,那這個時候 PFMERGE 就可以派上用場了,也就是同樣的用戶訪問這兩個頁面則只算做一次。

如下指令,把愛一個人總是要掉眼淚的風險:uv和愛情是幸福和不委屈:uv 兩個 HyperLogLog 集合數據合并到情感分類文章:uv這個集合中。

PFADD 愛情是幸福和不委屈:uv Chaya 趙小因 幸運草
# 合并兩個頁面 UV
PFMERGE 情感分類文章:uv 愛一個人總是要掉眼淚的風險:uv 愛情是幸福和不委屈:uv

接著,執行 PFCOUNT 情感分類文章:uv 統計合并后的數據。

> PFCOUNT 情感分類文章:uv
4

將多個 HyperLogLog 合并(merge)為一個 HyperLogLog , 合并后的 HyperLogLog 的基數接近于所有輸入 HyperLogLog 的可見集合(observed set)的并集。

4、Redisson 實戰

開門見山,Spring Boot 與 Redisson 集成詳見前面篇章,主要有四個方法。

  • add、addAll,閱讀文章調用該方法將數據存入 HyperLogLog 中。
  • count,統計基數。
  • merge,合并多個 HyperLogLog 為一個。
@Service
public class HyperLogLogService {

    @Autowired
    private RedissonClient redissonClient;

    /**
     * 將數據添加到 HyperLogLog
     *
     * @param logName
     * @param item
     * @param <T>
     */
    public <T> void add(String logName, T item) {
        RHyperLogLog<T> hyperLogLog = redissonClient.getHyperLogLog(logName);
        hyperLogLog.add(item);
    }

    /**
     * 將集合數據添加到 HyperLogLog
     * @param logName
     * @param items
     * @param <T>
     */
    public <T> void addAll(String logName, List<T> items) {
        RHyperLogLog<T> hyperLogLog = redissonClient.getHyperLogLog(logName);
        hyperLogLog.addAll(items);
    }

    /**
     * 將 otherLogNames 的 log 合并到 logName
     *
     * @param logName       當前 log
     * @param otherLogNames 需要合并到當前 log 的其他 logs
     * @param <T>
     */
    public <T> void merge(String logName, String... otherLogNames) {
        RHyperLogLog<T> hyperLogLog = redissonClient.getHyperLogLog(logName);
        hyperLogLog.mergeWith(otherLogNames);
    }

    /**
     * 統計基數
     *
     * @param logName 需要統計的 logName
     * @param <T>
     * @return
     */
    public <T> long count(String logName) {
        RHyperLogLog<T> hyperLogLog = redissonClient.getHyperLogLog(logName);
        return hyperLogLog.count();
    }
}
責任編輯:姜華 來源: 碼哥字節
相關推薦

2023-10-04 00:32:01

數據結構Redis

2019-08-16 09:41:56

UDP協議TCP

2021-09-30 07:59:06

zookeeper一致性算法CAP

2021-05-07 07:52:51

Java并發編程

2022-03-29 08:23:56

項目數據SIEM

2019-05-08 15:59:58

Python函數數據類型

2019-10-16 11:12:14

前端Docker虛擬機

2024-08-27 11:00:56

單例池緩存bean

2017-03-30 22:41:55

虛擬化操作系統軟件

2021-07-28 13:29:57

大數據PandasCSV

2021-09-10 13:06:45

HDFS底層Hadoop

2023-11-07 07:46:02

GatewayKubernetes

2024-03-26 00:00:06

RedisZSet排行榜

2024-09-27 11:51:33

Redis多線程單線程

2021-10-21 06:52:17

ZooKeeper分布式配置

2021-04-11 08:30:40

VRAR虛擬現實技術

2023-12-07 09:07:58

2022-08-18 20:45:30

HTTP協議數據

2021-11-10 07:47:48

Traefik邊緣網關

2018-09-26 11:02:46

微服務架構組件
點贊
收藏

51CTO技術棧公眾號

日韩亚洲欧美精品| 国产成人亚洲综合91精品| 久久久久久久久久久影视| 午夜小视频福利在线观看| 成人性色生活片免费看爆迷你毛片| 久久久噜噜噜久久中文字免| 成人在线一级片| 日本在线成人| 91激情在线视频| 天堂а√在线中文在线| 国产剧情在线观看| 国产成人av一区二区三区在线| 欧美中文字幕视频| 老女人性淫交视频| 凹凸成人精品亚洲精品密奴| 精品国精品国产尤物美女| 日本熟妇人妻中出| 国产偷倩在线播放| 国产精品国产三级国产aⅴ中文 | 久久久久成人网| 青娱乐国产视频| 欧美电影免费网站| 日韩欧美一级二级三级| 88av.com| 欲香欲色天天天综合和网| 日韩毛片在线免费观看| 日韩久久不卡| 三级视频在线播放| 国产91丝袜在线18| 91免费欧美精品| 中文字幕一区二区三区四区免费看 | 亚洲国产毛片完整版| 亚洲一区二区福利视频| 日本精品另类| 色婷婷综合中文久久一本| 久久国产午夜精品理论片最新版本| 久草免费在线观看| 欧美国产日本韩| 品久久久久久久久久96高清| 污污网站在线免费观看| 成人亚洲精品久久久久软件| 亚洲tv在线观看| 国产精品欧美激情在线| 蜜臀av一区二区在线免费观看| 欧美一区深夜视频| 在线观看免费国产视频| 亚洲精品乱码| 97成人精品区在线播放| 国产午夜小视频| 亚洲精品看片| 51久久精品夜色国产麻豆| 日韩久久精品视频| 亚洲精品婷婷| 26uuu亚洲国产精品| www.国产高清| 久久久夜精品| 国产精品极品美女在线观看免费| 亚洲国产成人无码av在线| 亚洲一区二区动漫| 欧美亚洲另类视频| 人人爽人人爽人人片av| 日韩精品一级中文字幕精品视频免费观看 | 日韩中文字幕在线免费观看| 中文字幕免费视频| 欧美亚洲国产激情| 色悠悠久久88| www.超碰在线观看| 黄色综合网站| 57pao成人永久免费视频| 日本韩国欧美中文字幕| 久久伊人亚洲| 国产区亚洲区欧美区| 国产乱淫a∨片免费视频| 国产精品99久久久| 国产欧美日韩亚洲| 黄色影院在线播放| 成人免费在线播放视频| 美女av免费观看| 一本大道色婷婷在线| 91久久国产综合久久| 色啦啦av综合| 成人知道污网站| 亚洲欧美一区二区三区情侣bbw| 日本一道本视频| 在线电影一区二区| 国内揄拍国内精品少妇国语| www.com亚洲| 韩国成人精品a∨在线观看| 成人91视频| 麻豆av电影在线观看| 中文字幕一区二区三中文字幕| 好吊色视频988gao在线观看| 中文字幕在线直播| 在线电影院国产精品| 蜜臀av粉嫩av懂色av| 欧美理论视频| 久久久久国产精品免费| 国产主播第一页| 国产电影一区二区三区| 欧美系列一区| 蜜臀av在线| 欧美日韩另类国产亚洲欧美一级| 精品国产一二区| 欧美日韩在线二区| 欧美放荡办公室videos4k| 一级片在线观看免费| 国产一区二区三区高清播放| 欧美日本亚洲| 婷婷色在线资源| 欧美影片第一页| 中国黄色片视频| 成人在线免费观看视频| 午夜欧美不卡精品aaaaa| 91av久久久| 久久精品一二三| 人体内射精一区二区三区 | julia一区二区中文久久94| 九色视频网站在线观看| 亚洲一二三四区| 欧美激情国内自拍| 日韩在线欧美| 日韩美女在线观看一区| 欧美 日韩 综合| 亚洲欧美偷拍另类a∨色屁股| 久久久久久久片| 日韩三级视频| 国模吧一区二区| aaa国产视频| 日韩一区有码在线| 三上悠亚av一区二区三区| 美女毛片一区二区三区四区| 亚洲 日韩 国产第一| 精品人妻一区二区三区蜜桃| 国产精品国产馆在线真实露脸| 欧美韩国日本在线| 久久九九热re6这里有精品| 久久综合伊人77777蜜臀| 久久久久亚洲av成人毛片韩| 国产毛片精品视频| 中文字幕日韩精品久久| 日本成人福利| 综合激情国产一区| 亚洲精品一区二区二区| 国产欧美日韩中文久久| 日韩福利视频在线| 精品久久久久中文字幕小说| 国产不卡av在线| 欧美xxx.com| 欧洲生活片亚洲生活在线观看| 播金莲一级淫片aaaaaaa| 亚洲综合电影一区二区三区| 精品在线观看一区二区| 看黄在线观看| 亚洲人成亚洲人成在线观看| 久久精品视频5| 久久久国产精品午夜一区ai换脸| 国产真实乱子伦| 国产精品嫩草影院在线看| 日本国产精品视频| 国产一级网站视频在线| 欧美日韩一区二区在线观看| 中文字幕第69页| 国产一区二区在线观看免费| 可以在线看黄的网站| 视频精品国内| 国内精品免费午夜毛片| 日韩欧美在线番号| 在线观看日韩av先锋影音电影院| 国产黄色录像视频| 国产一区二区三区免费看| www.亚洲成人网| 亚洲人亚洲人色久| 国产精品自拍网| 午夜影院免费在线| 亚洲精品一二区| 中文字幕永久在线视频| 一区二区三区影院| 中文字幕一区二区三区人妻不卡| 日韩高清在线观看| 精品嫩模一区二区三区| 国内精品国产成人国产三级粉色| 庆余年2免费日韩剧观看大牛| www免费网站在线观看| 91精品国产综合久久久久| 国产一级二级毛片| 国产三级一区二区三区| 欧美一级特黄aaa| 亚洲制服av| 一本久道久久综合| 草草视频在线一区二区| 日产精品久久久一区二区福利| 婷婷激情在线| 亚洲国产又黄又爽女人高潮的| 欧美性受xxx黑人xyx性爽| 亚洲精品视频在线| av黄色在线免费观看| 国产伦精品一区二区三区视频青涩 | 国产一区二区三区免费播放| 成人免费播放器| 91日韩视频| 久久精品人人做人人爽电影| 在线观看欧美| 国产精品jizz在线观看麻豆| 亚洲小说区图片区都市| 一区二区国产精品视频| 国产综合视频在线| 欧美日韩精品欧美日韩精品一| 日韩污视频在线观看| 国产精品二三区| 亚洲天堂视频一区| 大胆亚洲人体视频| 在线免费黄色网| 日韩高清在线一区| 色综合久久久久无码专区| 女人香蕉久久**毛片精品| 日韩av在线电影观看| 国产精品17p| 97夜夜澡人人双人人人喊| jizz久久久久久| 日本成人激情视频| 成人三级高清视频在线看| 久久国产精品免费视频 | 国产精品高潮久久久久无| 中文字幕乱码在线| 国产91精品露脸国语对白| 婷婷激情综合五月天| 久久综合影视| 无码人妻丰满熟妇区96| 伊人精品视频| 国产精品igao激情视频| 欧美 日韩 国产 一区| 亚洲人久久久| 欧美3p在线观看| 亚洲精品国产精品久久| 国产免费av一区二区三区| 久久亚洲综合网| 另类在线视频| 精品国产一二| 久久久精品国产**网站| 国产一区免费在线| 99精品中文字幕在线不卡| 97超级碰碰| 视频一区中文字幕精品| 91成人理论电影| 亚洲一区二区免费在线观看| 成人资源av| 99精品国产高清一区二区麻豆| 高清视频一区二区三区| 北条麻妃在线一区二区免费播放| av一区观看| 福利欧美精品在线| 精品国产一区二区三区免费 | 亚洲国产精彩中文乱码av| 亚洲爆乳无码一区二区三区| 欧美mv日韩mv国产网站| 人妻夜夜爽天天爽| 亚洲精品国产精品国自产在线| 少妇精品视频一区二区| 亚洲精品成人av| 免费一级毛片在线观看| 中文字幕日韩av| 久草免费在线| 久久久久久久久中文字幕| av中文字幕电影在线看| 91av视频在线播放| 韩国成人在线| 亚洲精品欧美一区二区三区| 亚洲日本va| 久久精品日产第一区二区三区| 国产成人精品免费视| 亚洲免费久久| 欧美日韩三级| 国产中文字幕视频在线观看| 日韩高清在线一区| 欧美国产日韩在线视频| 丁香婷婷深情五月亚洲| 亚洲人人夜夜澡人人爽| 亚洲国产精品成人综合色在线婷婷| 亚洲欧美精品久久| 一区二区三区日韩欧美精品 | 91精品免费观看| 韩国av免费在线| 国产一区二区三区日韩欧美| 影音先锋在线播放| 日本精品免费一区二区三区| 亚洲精品大全| 精品不卡在线| 亚洲高清影视| 成人观看免费完整观看| 狠狠色丁香婷婷综合| yy1111111| 亚洲色图欧美在线| 性无码专区无码| 欧美一级艳片视频免费观看| 欧美日韩日本网| 一区二区三区在线免费看| 日韩av电影免费在线观看| 欧美三级不卡| 99视频免费播放| 成人性生交大片| 四虎地址8848| 日韩欧美在线播放| 国产av一区二区三区精品| 亚洲精品一区二三区不卡| 国产三区视频在线观看| 国产91色在线|| 凹凸av导航大全精品| 在线观看福利一区| 亚欧成人精品| 91成人在线观看喷潮蘑菇| 中文字幕精品综合| 国产精品一区二区三区四| 欧美一二三在线| 日本a级在线| 国产97在线播放| 欧美调教在线| 国产成人一区二区三区别| 美女一区二区视频| 一级黄色性视频| 偷拍亚洲欧洲综合| 亚洲老妇色熟女老太| 日日骚久久av| 免费污视频在线一区| 久久久久久国产精品一区| 欧美日韩久久| 绯色av蜜臀vs少妇| 亚洲少妇30p| 亚洲图片小说视频| 中文字幕日韩视频| 日韩精品麻豆| 日本免费高清一区二区| 国产精品日韩精品欧美精品| 成年人小视频在线观看| 亚洲最大色网站| av av片在线看| 久久久国产一区| 亚洲精品无播放器在线播放| 无码免费一区二区三区免费播放 | 天天综合天天做天天综合| 午夜精品久久久久久久99热黄桃 | 99久久综合国产精品| 久久精品视频国产| 精品免费视频一区二区| 欧美xxxx免费虐| 国产一区二区自拍| 国产日韩一区| 欧美特黄一区二区三区| 欧美性猛交xxx| 九色在线观看| 国产精品美女呻吟| 爽成人777777婷婷| 午夜av中文字幕| 亚洲综合一区二区三区| 成人小说亚洲一区二区三区| 97精品国产91久久久久久| 韩国女主播一区二区三区| 欧美二区在线视频| 久久香蕉国产线看观看99| 伊人久久久久久久久久久久| 中文字幕av一区二区| 亚洲国产综合在线观看| 精品无码av无码免费专区| 成人午夜视频在线| 精品人妻一区二区三区免费看 | 永久免费毛片在线观看| 欧美在线制服丝袜| 草莓福利社区在线| 国产一区免费观看| 日韩主播视频在线| 久久精品亚洲a| 亚洲的天堂在线中文字幕| 香蕉成人av| 性做爰过程免费播放| 成人黄色av电影| 亚洲图片欧美日韩| 欧美久久久精品| 亚洲深夜福利在线观看| 黄色在线视频网| 一区二区三区高清在线| 日本福利午夜视频在线| 国产精品三级网站| 欧美三级午夜理伦三级中文幕| 五月婷婷综合在线观看| 欧美色视频在线观看| 羞羞污视频在线观看| 久久亚洲高清| 韩国三级在线一区| 日韩av大片在线观看| 精品国产欧美一区二区五十路| julia中文字幕一区二区99在线| 成年人观看网站| 亚洲欧美欧美一区二区三区| 日韩大胆人体| 成人日韩av在线| 日韩专区在线视频| 国产黄色片视频| 久久亚洲国产成人| 久久97视频| 国模无码视频一区| 欧美精品久久一区|