欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis中HyperLogLog的使用詳情

 更新時間:2022年09月23日 09:32:43   作者:_燈火闌珊處  
這篇文章主要介紹了Redis中HyperLogLog的使用詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言

HyperLogLog ,基數(shù)統(tǒng)計;

那什么是基數(shù)?

比如有兩個數(shù)組

數(shù)組A = [1,2,3,4,5];

數(shù)組B = [3,4,5,6,7];

這時候基數(shù)就是 [1,2,3,4,5,6,7],總共有7個數(shù);

就是去重之后的數(shù)據(jù);

HyperLogLog 就是用來做去重復(fù)統(tǒng)計的;

bitmap 在做統(tǒng)計時,雖然使用的是 bit 來做記錄,已經(jīng)很節(jié)省空間了;

但是在隨著數(shù)據(jù)量快速增長的情況下,bitmap 也是很占內(nèi)存空間的;

而 HyperLogLog 就不同了,HyperLogLog 的每個 key 只占用 12kb 的內(nèi)存,

就可以統(tǒng)計 2的64 次方個基數(shù);

而且不會隨著數(shù)據(jù)量的增多而變大,就是固定的 12kb;

這是因為 HyperLogLog 每次只會根據(jù)添加的數(shù)據(jù)去計算基數(shù),而不保存添加的數(shù)據(jù)本身;

但這也造成了一個問題,就是 HyperLogLog 基數(shù)統(tǒng)計的準(zhǔn)確率不是100%,會有 0.81% 的誤差;

但對于億級數(shù)據(jù)的統(tǒng)計,這點誤差似乎可以忽略不計;

同樣的,bitmap 記錄數(shù)據(jù)本身,它的計算是精確的;

所有,也可以說 HyperLogLog 是一種概率計算,但是誤差是很小的。

這是reidis作者寫的關(guān)于HyperLogLog的文章

HyperLogLog 的使用也非常簡單,就3個操作api

添加元素

pfadd key value [value ...]
pfadd 20220628:uv ip1 ip2 ip3
pfadd 20220629:uv ip1 ip2 ip3 ip4 ip5
pfadd 20220630:uv ip2 ip4 ip5 ip6 ip7 ip8

重復(fù)數(shù)據(jù)不會被保存,返回的是0

> pfadd 20220628:uv ip1 ip2 ip3
1
> pfadd 20220628:uv ip1 ip2 ip3
0
  • 獲取 HyperLogLog 的基數(shù)估算值
PFCOUNT key [key ...]
> pfcount 20220628:uv 20220629:uv
5

合并得出的不會被儲存,使用之后就會被刪掉

  • 合并多個key
pfmerge destkey key [key ...]
> pfmerge result 20220628:uv 20220629:uv 20220630:uv
OK

pfmerge 合并多個key后,會生成一條 result 數(shù)據(jù)

然后再對 result 做 pfcount 操作

> pfcount result
8

這時候拿到的值就是 上面3個key 計算出來的基數(shù)。

HyperLogLog 在 spring 里的使用也非常簡單,

pfadd 對應(yīng)的是 .add() 操作;

pfcount 對應(yīng)的是 .size() 操作;

pfmerge 對應(yīng)的是 .union() 操作;

下面是使用的 Demo

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HyperLogLogOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@SpringBootTest
@RunWith(SpringRunner.class)
class RedisTest {
    
    @Resource
    private RedisTemplate<String, String> redisTemplate;

    @Test
    void hyperLogLogTest() {
        HyperLogLogOperations<String, String> hyperLogLogOperations = redisTemplate.opsForHyperLogLog();
        // 添加元素
        Long add = hyperLogLogOperations.add("20220628:uv", "ip1", "ip2", "ip3");
        System.out.println("add : " + add);

        hyperLogLogOperations.add("20220629:uv", "ip1", "ip2", "ip3", "ip4", "ip5");
        hyperLogLogOperations.add("20220630:uv", "ip2", "ip4", "ip5", "ip6", "ip7", "ip8");

        // 獲取元素基數(shù)
        Long size = hyperLogLogOperations.size("20220628:uv", "20220629:uv");
        System.out.println("size : " + size);

        // 合并多個元素
        Long result = hyperLogLogOperations.union("unionResult", "20220628:uv", "20220629:uv", "20220630:uv");
        System.out.println("result : " + result);
        Long unionResult = hyperLogLogOperations.size("unionResult");
        System.out.println("unionResult : " + unionResult);
    }
}

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

相關(guān)文章

  • Redis異步隊列的實現(xiàn)及應(yīng)用場景

    Redis異步隊列的實現(xiàn)及應(yīng)用場景

    異步隊列是一種底層基于異步 I/O 模型的消息隊列,用于在分布式系統(tǒng)中進(jìn)行同步和異步的通訊和協(xié)作,本文主要介紹了Redis異步隊列的實現(xiàn)及應(yīng)用場景,感興趣的可以了解一下
    2023-12-12
  • 了解redis中RDB結(jié)構(gòu)_動力節(jié)點Java學(xué)院整理

    了解redis中RDB結(jié)構(gòu)_動力節(jié)點Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了redis中RDB結(jié)構(gòu),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Redis緩存過期的實現(xiàn)示例

    Redis緩存過期的實現(xiàn)示例

    Redis緩存的過期策略是保證緩存可靠性和性能的關(guān)鍵之一,本文主要介紹了Redis緩存過期的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • redis客戶端實現(xiàn)高可用讀寫分離的方式詳解

    redis客戶端實現(xiàn)高可用讀寫分離的方式詳解

    基于sentienl 獲取和動態(tài)感知 master、slaves節(jié)點信息的變化,我們的讀寫分離客戶端就能具備高可用+動態(tài)擴(kuò)容感知能力了,接下來通過本文給大家分享redis客戶端實現(xiàn)高可用讀寫分離的方式,感興趣的朋友一起看看吧
    2021-07-07
  • Redis報錯NOAUTH?Authentication?required簡單解決辦法

    Redis報錯NOAUTH?Authentication?required簡單解決辦法

    這篇文章主要給大家介紹了關(guān)于Redis報錯NOAUTH?Authentication?required的簡單解決辦法,Redis無密碼報錯NOAUTH Authentication required的原因是客戶端訪問Redis時需要提供密碼,但是沒有提供或提供的密碼不正確,需要的朋友可以參考下
    2024-05-05
  • 如何向redis中寫入大量的數(shù)據(jù)

    如何向redis中寫入大量的數(shù)據(jù)

    文章介紹了通過Python腳本生成Redis命令并輸出至文件,再用Shell腳本批量執(zhí)行的流程,強(qiáng)調(diào)Pipeline技術(shù)可提升批量寫入效率,并說明如何驗證數(shù)據(jù)插入成功
    2025-08-08
  • Redis不僅僅是緩存,還是……

    Redis不僅僅是緩存,還是……

    Redis是一個開源的(BSD協(xié)議),內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲,它可以用作數(shù)據(jù)庫,緩存,消息代理。這篇文章主要介紹了Redis不僅僅是緩存,還是……,需要的朋友可以參考下
    2020-12-12
  • k8s部署redis集群實現(xiàn)過程實例詳解

    k8s部署redis集群實現(xiàn)過程實例詳解

    這篇文章主要為大家介紹了k8s部署redis集群實現(xiàn)過程實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Redis集群的三種部署方式及三種應(yīng)用問題的處理

    Redis集群的三種部署方式及三種應(yīng)用問題的處理

    這篇文章主要介紹了Redis集群的三種部署方式及三種應(yīng)用問題的處理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 解讀redis?slaveof命令執(zhí)行后為什么需要清庫重新同步

    解讀redis?slaveof命令執(zhí)行后為什么需要清庫重新同步

    這篇文章主要介紹了redis?slaveof命令執(zhí)行后為什么需要清庫重新同步,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評論