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

redis統(tǒng)計(jì)APP在線人數(shù)的實(shí)例

 更新時(shí)間:2020年11月24日 11:16:16   作者:宛十八  
這篇文章主要介紹了redis統(tǒng)計(jì)APP在線人數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近有個(gè)需求,需要統(tǒng)計(jì)APP的在線人數(shù),其實(shí)以前也統(tǒng)計(jì)過(guò),采取的是上線發(fā)送一個(gè)請(qǐng)求$this->cache->incr()加1,下線的時(shí)候$this->cache->decr()減1,可是這樣做的后果是,發(fā)現(xiàn)在線人數(shù)錯(cuò)的離譜,幾千人同是在線。

why?原來(lái)APP端如果卸載的時(shí)候,那么就不會(huì)發(fā)請(qǐng)求,還有如果非正常終止的時(shí)候,也不會(huì)發(fā)送下線請(qǐng)求?

于是乎找一個(gè)準(zhǔn)備的統(tǒng)計(jì)方式

1:客戶端十分鐘發(fā)送一次請(qǐng)求,帶上序列號(hào),服務(wù)器端set('前綴.序列號(hào)',過(guò)期時(shí)間),然后服務(wù)器端統(tǒng)計(jì) keys 前綴*

可是你看keys之后的數(shù)據(jù)格式:

var_dump(); 

array (size=2)
 0 => string 'c_001dddddddddddddddddddddddddddddddd' (length=37)
 1 => string 'c_001ddddddddddddddddddddddddddddddddd' (length=38)
 print_r();
 Array( [0] => c_001dddddddddddddddddddddddddddddddd [1] => c_001ddddddddddddddddddddddddddddddddd)

數(shù)據(jù)keys *之后數(shù)據(jù)格式亂糟糟的,不是數(shù)組,根本沒(méi)有辦法處理。也許可以把他看成一個(gè)文件,然后正則匹配,再出處理,可是這樣有多慢呢,keys *本來(lái)就有些慢,還存入文件,正則匹配,然后循環(huán),獲取數(shù)組長(zhǎng)度,就更加慢了。

keys *之后出來(lái)是列表吧,更本不是數(shù)字,redis也沒(méi)有這種獲取某個(gè)特殊的鍵前綴的數(shù)量的函數(shù)。

如果APP就一個(gè)的話,大家可以把這個(gè)鍵值存儲(chǔ)到一個(gè)庫(kù)里面,然后用dbsize()直接獲取庫(kù)數(shù)量,這個(gè)庫(kù)不存儲(chǔ)其他的鍵值。

可是現(xiàn)在我要統(tǒng)計(jì)六個(gè)APP的在線情況,不可能一個(gè)APP存儲(chǔ)一個(gè)庫(kù)吧

2:利用序列,

$date = date("Ymdh",time()); $this->_cache->sadd($date.$head,$client,7200);

獲取當(dāng)前時(shí)間,之后加上客戶端類型前綴,作為鍵,存入序列,本次方法是一個(gè)小時(shí)存取一次,就是一個(gè)小時(shí)之內(nèi)的都算在線人數(shù),具體多久算在線人數(shù),大家可以自我把握。

存的時(shí)候:

$date = date("Ymdh",time());

$this->_cache->sadd($date.$head,$client,7200);//存入集合 1個(gè)小時(shí)存入一次

取數(shù)量的時(shí)候

$date = date("Ymdh",time());//當(dāng)前時(shí)間
$hour = date("Ymdh",time()-3600);//上一個(gè)小時(shí)時(shí)間
$score = date("i",time());//當(dāng)前時(shí)間分?jǐn)?shù)
$datedata= $this->_cache->scard($date.$head);//這個(gè)小時(shí)數(shù)量
$hourdata= $this->_cache->scard($hour.$head);//上個(gè)小時(shí)數(shù)量
if($score == '00'){
 $online = $hourdata;//如果當(dāng)前時(shí)間是整點(diǎn),那么一個(gè)小時(shí)人數(shù),就是上個(gè)小時(shí)人數(shù)
}else{
 $online = intval(((60-$score)/60)*$hourdata)+ $datedata;//如果不是整點(diǎn),那么計(jì)算當(dāng)前多少分鐘,當(dāng)前的數(shù)量,加上上個(gè)小時(shí)比例數(shù)量 湊夠一個(gè)小時(shí)數(shù)量
}

$online就是在線數(shù)量

補(bǔ)充知識(shí):redis命中率計(jì)算

redis提供了INFO這個(gè)命令,能夠隨時(shí)監(jiān)控服務(wù)器的狀態(tài),只用telnet到對(duì)應(yīng)服務(wù)器的端口,執(zhí)行命令即可:

telnet localhost 6379

info

在輸出的信息里面有這幾項(xiàng)和緩存的狀態(tài)比較有關(guān)系:

keyspace_hits:14414110
keyspace_misses:3228654
used_memory:433264648
expired_keys:1333536
evicted_keys:1547380

通過(guò)計(jì)算hits和miss,我們可以得到緩存的命中率:14414110 / (14414110 + 3228654) = 81% ,一個(gè)緩存失效機(jī)制,和過(guò)期時(shí)間設(shè)計(jì)良好的系統(tǒng),命中率可以做到95%以上

有個(gè)ruby gem叫redis-stat,它利用INFO命令展現(xiàn)出更直觀的信息報(bào)表,推薦:

https://github.com/junegunn/redis-stat

以上這篇redis統(tǒng)計(jì)APP在線人數(shù)的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java打印出菱形圖案實(shí)例詳解

    java打印出菱形圖案實(shí)例詳解

    在本篇文章里小編給大家分享的是關(guān)于java打印出菱形圖案實(shí)例詳解,需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • Java實(shí)現(xiàn)簡(jiǎn)單的掃雷圖

    Java實(shí)現(xiàn)簡(jiǎn)單的掃雷圖

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單的掃雷圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • SpringBoot集成Lettuce客戶端操作Redis的實(shí)現(xiàn)

    SpringBoot集成Lettuce客戶端操作Redis的實(shí)現(xiàn)

    本文主要介紹了SpringBoot集成Lettuce客戶端操作Redis的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用

    Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用

    這篇文章主要介紹了spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java實(shí)現(xiàn)將文件或者文件夾壓縮成zip的詳細(xì)代碼

    Java實(shí)現(xiàn)將文件或者文件夾壓縮成zip的詳細(xì)代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)將文件或者文件夾壓縮成zip的詳細(xì)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Java 遞歸查詢部門樹(shù)形結(jié)構(gòu)數(shù)據(jù)的實(shí)踐

    Java 遞歸查詢部門樹(shù)形結(jié)構(gòu)數(shù)據(jù)的實(shí)踐

    本文主要介紹了Java 遞歸查詢部門樹(shù)形結(jié)構(gòu)數(shù)據(jù)的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • IDEA常量字符串過(guò)長(zhǎng)問(wèn)題及解決方案

    IDEA常量字符串過(guò)長(zhǎng)問(wèn)題及解決方案

    在編譯Java項(xiàng)目時(shí)遇到“常量字符串過(guò)長(zhǎng)”錯(cuò)誤,可以通過(guò)修改編譯器設(shè)置解決,具體方法是進(jìn)入IDE的設(shè)置(File>>Settings>>Build, Execution, Deployment>>Compiler>>Java Compiler),將使用的編譯器更改為Eclipse,如果問(wèn)題依舊
    2024-10-10
  • 詳解springboot 使用c3p0數(shù)據(jù)庫(kù)連接池的方法

    詳解springboot 使用c3p0數(shù)據(jù)庫(kù)連接池的方法

    本篇文章主要介紹了springboot 使用c3p0數(shù)據(jù)庫(kù)連接池的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 一個(gè)依賴搞定?Spring?Boot?接口防盜刷的流程分析

    一個(gè)依賴搞定?Spring?Boot?接口防盜刷的流程分析

    kk-anti-reptile 是適用于基于 spring-boot 開(kāi)發(fā)的分布式系統(tǒng)的反爬蟲(chóng)組件,這篇文章主要介紹了一個(gè)依賴搞定?Spring?Boot?接口防盜刷,需要的朋友可以參考下
    2022-06-06
  • 利用反射實(shí)現(xiàn)Excel和CSV 轉(zhuǎn)換為Java對(duì)象功能

    利用反射實(shí)現(xiàn)Excel和CSV 轉(zhuǎn)換為Java對(duì)象功能

    將Excel或CSV文件轉(zhuǎn)換為Java對(duì)象(POJO)以及將Java對(duì)象轉(zhuǎn)換為Excel或CSV文件可能是一個(gè)復(fù)雜的過(guò)程,但如果使用正確的工具和技術(shù),這個(gè)過(guò)程就會(huì)變得十分簡(jiǎn)單,在本文中,我們將了解如何利用一個(gè)Java反射的庫(kù)來(lái)實(shí)現(xiàn)這個(gè)功能,需要的朋友可以參考下
    2023-11-11

最新評(píng)論