新聞中心

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


咨詢(xún)
建站咨詢(xún)
