亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis如何使用HyperLogLog的實現(xiàn)

 更新時間:2022年06月02日 10:48:54   作者:@SmartSi  
本文主要介紹了Redis如何使用HyperLogLog的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧

1. 概述

Redis 在 2.8.9 版本添加了 HyperLogLog 數(shù)據(jù)結(jié)構(gòu),用來做基數(shù)統(tǒng)計,其優(yōu)點是在輸入元素的數(shù)量非常大時,計算基數(shù)所需的空間比較小并且一般比較恒定。

在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內(nèi)存就可以計算接近 2^64 個不同元素的基數(shù)。這和計算基數(shù)時,元素越多耗費內(nèi)存越多的集合形成鮮明對比。但是,因為 HyperLogLog 只會根據(jù)輸入元素來計算基數(shù),并不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣能返回輸入的各個元素。

2. 什么是基數(shù)?

比如數(shù)據(jù)集 {1, 3, 5, 7, 5, 7, 8}, 那么這個數(shù)據(jù)集的基數(shù)集為 {1, 3, 5 ,7, 8}, 基數(shù)(不重復(fù)元素)為5。基數(shù)估計就是在誤差可接受的范圍內(nèi),快速計算基數(shù)。

3. 命令

HyperLogLog 目前只支持 3 個命令,PFADD、PFCOUNT、PFMERGE。我們先來逐一介紹一下。

3.1 PFADD

最早可用版本:2.8.9。時間復(fù)雜度:O(1)。

PFADD 命令可以將元素(可以指定多個元素)添加到 HyperLogLog 數(shù)據(jù)結(jié)構(gòu)中,存儲到第一個參數(shù) key 指定的鍵中。命令執(zhí)行之后,如果基數(shù)估計(評估的元素個數(shù))發(fā)生變化就返回 1,否則返回 0。如果指定的 key 不存在,那么就創(chuàng)建一個空的 HyperLogLog 數(shù)據(jù)結(jié)構(gòu)(即,指定字符串長度以及編碼的 Redis String)。也可以調(diào)用不指定元素參數(shù)而只指定鍵的命令。如果鍵存在,不執(zhí)行任何操作并返回 0;如果鍵不存在,則會創(chuàng)建一個新的 HyperLogLog 數(shù)據(jù)結(jié)并且返回 1。本質(zhì)上只是創(chuàng)建一個新的 HyperLogLog 數(shù)據(jù)結(jié),不存儲任何元素。

(1) 語法格式:

PFADD key element [element ...]

(2) 返回值:

整型,如果至少有個元素被添加返回 1,否則返回 0。

(3) Example:

127.0.0.1:6379> PFADD hll a b c d e f g
(integer) 1
127.0.0.1:6379> pfcount hll
(integer) 7

3.2 PFCOUNT

最早可用版本:2.8.9。時間復(fù)雜度:O(1),對于多個比較大的key的時間復(fù)雜度是O(N)。

PFCOUNT 命令返回指定 HyperLogLog 的基數(shù)估算值(元素個數(shù))。對于單個鍵,該命令返回的是該鍵的基數(shù)估算值,如果該鍵不存在,則返回 0。對于多個鍵,返回的是多個 HyperLogLog 并集的基數(shù)估算值,通過將多個 HyperLogLog 合并為一個臨時的 HyperLogLog 計算基數(shù)估算值。HyperLogLog 只使用很少且恒定的內(nèi)存來計算集合的不同元素個數(shù)。每個 HyperLogLog 只用 12K 加上鍵本身的幾個字節(jié)。

(1) 語法格式:

PFCOUNT key [key ...]

(2) 返回值:

整數(shù),返回指定 HyperLogLog 的基數(shù)估算值,如果多個 HyperLogLog 則返回并集的基數(shù)估算值。

(3) Example:

127.0.0.1:6379> PFADD hll foo bar zap
(integer) 1
127.0.0.1:6379> PFADD hll zap zap zap
(integer) 0
127.0.0.1:6379> PFADD hll foo bar
(integer) 0
127.0.0.1:6379> PFCOUNT hll
(integer) 3
127.0.0.1:6379> PFADD some-other-hll 1 2 3
(integer) 1
127.0.0.1:6379> PFCOUNT some-other-hll
(integer) 3
127.0.0.1:6379> PFCOUNT hll some-other-hll
(integer) 6

(4) 限制:

HyperLogLog 返回的結(jié)果并不精確,錯誤率大概在 0.81% 左右。

該命令會修改 HyperLogLog,會使用8個字節(jié)來存儲上一次計算的基數(shù)。所以,從技術(shù)角度來講,PFCOUNT 是一個寫命令。

(5) 性能問題

即使理論上處理一個密集型 HyperLogLog 需要花費較長時間,但是當只指定一個鍵時,PFCOUNT 命令仍然具有很高的性能。這是因為 PFCOUNT 會緩存上一次計算的基數(shù),并且這個基數(shù)并不會一直變動,因為 PFADD 命令大多數(shù)情況下不會更新寄存器。所以才可以達到每秒上百次請求的效果。

當使用 PFCOUNT 命令處理多個鍵時,會對 HyperLogLog 進行合并操作,這一步非常耗時,更重要的是通過計算出來的并集的基數(shù)是不能緩存的。因此當使用多個鍵時,PFCOUNT 可能需要花費一些時間(毫秒數(shù)量級),因此不建議過多使用。

需要注意的是,該命令的單鍵和多鍵執(zhí)行語義是不同的并且具有不同的性能。不建議過多使用多鍵執(zhí)行語義。

3.3 PFMERGE

最早可用版本:2.8.9。時間復(fù)雜度:O(N),N是要合并的HyperLogLog的數(shù)量。

PFMERGE 命令將多個 HyperLogLog 合并為一個 HyperLogLog。合并后的 HyperLogLog 的基數(shù)估算值是通過對所有給定 HyperLogLog 進行并集計算得出的。計算完的結(jié)果保存到指定的鍵中。

語法格式:

PFMERGE destkey sourcekey [sourcekey ...]

返回值:

返回 OK。

Example:

127.0.0.1:6379> PFADD hll1 foo bar zap a
(integer) 1
127.0.0.1:6379> PFADD hll2 a b c foo
(integer) 1
127.0.0.1:6379> PFMERGE hll3 hll1 hll2
OK
127.0.0.1:6379> PFCOUNT hll3
(integer) 6

到此這篇關(guān)于Redis如何使用HyperLogLog的實現(xiàn)的文章就介紹到這了,更多相關(guān)Redis HyperLogLog內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis+lua實現(xiàn)限流的項目實踐

    redis+lua實現(xiàn)限流的項目實踐

    redis有很多限流的算法(比如:令牌桶,計數(shù)器,時間窗口)等,在分布式里面進行限流的話,我們則可以使用redis+lua腳本進行限流,下面就來介紹一下redis+lua實現(xiàn)限流
    2023-10-10
  • Redis數(shù)據(jù)類型string和Hash詳解

    Redis數(shù)據(jù)類型string和Hash詳解

    大家都知道Redis中有五大數(shù)據(jù)類型分別是String、List、Set、Hash和Zset,本文給大家分享Redis數(shù)據(jù)類型string和Hash的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • Redis基本數(shù)據(jù)類型哈希Hash常用操作命令

    Redis基本數(shù)據(jù)類型哈希Hash常用操作命令

    這篇文章主要為大家介紹了Redis基本數(shù)據(jù)類型哈希Hash常用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Redis簡單動態(tài)字符串SDS的實現(xiàn)示例

    Redis簡單動態(tài)字符串SDS的實現(xiàn)示例

    Redis沒有直接復(fù)用C語言的字符串,而是新建了SDS,本文主要介紹了Redis簡單動態(tài)字符串SDS的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • Redis可視化工具Redis?Desktop?Manager的具體使用

    Redis可視化工具Redis?Desktop?Manager的具體使用

    本文主要介紹了Redis可視化工具Redis?Desktop?Manager的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 完美解決Redis在雙擊redis-server.exe出現(xiàn)閃退問題

    完美解決Redis在雙擊redis-server.exe出現(xiàn)閃退問題

    本文主要介紹了完美解決Redis在雙擊redis-server.exe出現(xiàn)閃退問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-01-01
  • 如何使用Redis鎖處理并發(fā)問題詳解

    如何使用Redis鎖處理并發(fā)問題詳解

    這篇文章主要給大家介紹了關(guān)于如何使用Redis鎖處理并發(fā)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用Redis具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧
    2019-07-07
  • 基于redis集群設(shè)置密碼的實例

    基于redis集群設(shè)置密碼的實例

    今天小編就為大家分享一篇基于redis集群設(shè)置密碼的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 解決redis-cli報錯Could not connect to Redis at 127.0.0.1:6379: Connection refused

    解決redis-cli報錯Could not connect to Redis&

    這篇文章主要介紹了解決redis-cli報錯Could not connect to Redis at 127.0.0.1:6379: Connection refused,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 使用Redis解決高并發(fā)方案及思路解讀

    使用Redis解決高并發(fā)方案及思路解讀

    這篇文章主要介紹了使用Redis解決高并發(fā)方案及思路,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論