新聞中心

在棲霞等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需設(shè)計(jì)網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷,外貿(mào)營銷網(wǎng)站建設(shè),棲霞網(wǎng)站建設(shè)費(fèi)用合理。
什么是HyperLoglog
HyperLoglog 是 Redis 重要的數(shù)據(jù)類型之一,它非常適用于海量數(shù)據(jù)的計(jì)算、統(tǒng)計(jì),其特點(diǎn)是占用空間小,計(jì)算速度快。
HyperLoglog 采用了一種基數(shù)估計(jì)算法,因此,最終得到的結(jié)果會存在一定范圍的誤差(標(biāo)準(zhǔn)誤差為 0.81%)。
每個 HyperLogLog key 只占用 12 KB 內(nèi)存,所以理論上可以存儲大約2^64個值,而 set(集合)則是元素越多占用的內(nèi)存就越多,兩者形成了鮮明的對比 。
HyperLoglog 使用起來較為方便,但是其內(nèi)部原理較為復(fù)雜,不建議大家深入研究,只要會用即可。
基數(shù)定義
基數(shù)定義:一個集合中不重復(fù)的元素個數(shù)就表示該集合的基數(shù),比如集合 {1,2,3,1,2} ,它的基數(shù)集合為 {1,2,3} ,所以基數(shù)為 3。HyperLogLog 正是通過基數(shù)估計(jì)算法來統(tǒng)計(jì)輸入元素的基數(shù)。
HyperLoglog 不會儲存元素值本身,因此,它不能像 set 那樣,可以返回具體的元素值。HyperLoglog 只記錄元素的數(shù)量,并使用基數(shù)估計(jì)算法,快速地計(jì)算出集合的基數(shù)是多少。
場景應(yīng)用
HyperLogLog 也有一些特定的使用場景,它最典型的應(yīng)用場景就是統(tǒng)計(jì)網(wǎng)站用戶月活量,或者網(wǎng)站頁面的 UV(網(wǎng)站獨(dú)立訪客)數(shù)據(jù)等。
UV 與 PV(頁面瀏覽量) 不同,UV 需要去重,同一個用戶一天之內(nèi)的多次訪問只能計(jì)數(shù)一次。這就要求用戶的每一次訪問都要帶上自身的用戶 ID,無論是登陸用戶還是未登陸用戶都需要一個唯一 ID 來標(biāo)識。
當(dāng)一個網(wǎng)站擁有巨大的用戶訪問量時,我們可以使用 Redis 的 HyperLogLog 來統(tǒng)計(jì)網(wǎng)站的 UV (網(wǎng)站獨(dú)立訪客)數(shù)據(jù),它提供的去重計(jì)數(shù)方案,雖說不精確,但 0.81% 的誤差足以滿足 UV 統(tǒng)計(jì)的需求。
常用命令
| 命令 | 說明 |
|---|---|
| PFADD key element [element ...] | 添加指定元素到 HyperLogLog key 中。 |
| PFCOUNT key [key ...] | 返回指定 HyperLogLog key 的基數(shù)估算值。 |
| PFMERGE destkey sourcekey [sourcekey ...] | 將多個 HyperLogLog key 合并為一個 key。 |
基本命令
HyperLogLog 提供了三個常用命令,分別是
PFADD、
PFCOUNT和
PFMERGE。
下面看一組實(shí)例演示:假設(shè)有 6 個用戶(user01-user06),他們分別在上午 8 與 9 點(diǎn)訪問了
www.biancheng.netC語言中文網(wǎng)。
#向指定的key中添加用戶 127.0.0.1:6379> PFADD user:uv:2021011308 user01 user02 user03 (integer) 1 #向指定的key中添加用戶 127.0.0.1:6379> PFADD user:uv:2021011309 user04 user05 (integer) 1 #統(tǒng)計(jì)基數(shù)值 127.0.0.1:6379> PFCOUNT user:uv:2021011308 (integer) 3 #重復(fù)元素不能添加成功,其基數(shù)仍然為3 127.0.0.1:6379> PFADD user:uv:2021011308 user01 user02 (integer) 0 127.0.0.1:6379> PFCOUNT user:uv:2021011308 (integer) 3 #添加新元素值 127.0.0.1:6379> PFADD user:uv:2021011308 user06 (integer) 1 #基數(shù)值變?yōu)? 127.0.0.1:6379> PFCOUNT user:uv:2021011308 (integer) 4 #統(tǒng)計(jì)兩個key的基數(shù)值 127.0.0.1:6379> PFCOUNT user:uv:2021011308 user:uv:2021011309 (integer) 6 #將兩個key值合并為一個 127.0.0.1:6379> PFMERGE user:uv:2021011308-09 user:uv:2021011308 user:uv:2021011309 OK #使用合并后key統(tǒng)計(jì)基數(shù)值 127.0.0.1:6379> PFCOUNT user:uv:2021011308-09 (integer) 6
網(wǎng)頁名稱:RedisHyperLoglog基數(shù)統(tǒng)計(jì)
當(dāng)前URL:http://m.fisionsoft.com.cn/article/djsjieo.html


咨詢
建站咨詢
