0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis巧用數(shù)據(jù)類型實現(xiàn)億級數(shù)據(jù)統(tǒng)計!

倩倩 ? 來源:碼哥字節(jié) ? 作者:碼哥字節(jié) ? 2022-09-22 14:23 ? 次閱讀


在移動應(yīng)用的業(yè)務(wù)場景中,我們需要保存這樣的信息:一個 key 關(guān)聯(lián)了一個數(shù)據(jù)集合,同時還要對集合中的數(shù)據(jù)進(jìn)行統(tǒng)計排序。

常見的場景如下:

  • 給一個 userId ,判斷用戶登陸狀態(tài);
  • 兩億用戶最近 7 天的簽到情況,統(tǒng)計 7 天內(nèi)連續(xù)簽到的用戶總數(shù);
  • 統(tǒng)計每天的新增與第二天的留存用戶數(shù);
  • 統(tǒng)計網(wǎng)站的對訪客(Unique Visitor,UV)量
  • 最新評論列表
  • 根據(jù)播放量音樂榜單

通常情況下,我們面臨的用戶數(shù)量以及訪問量都是巨大的,比如百萬、千萬級別的用戶數(shù)量,或者千萬級別、甚至億級別的訪問信息。

所以,我們必須要選擇能夠非常高效地統(tǒng)計大量數(shù)據(jù)(例如億級)的集合類型。

如何選擇合適的數(shù)據(jù)集合,我們首先要了解常用的統(tǒng)計模式,并運用合理的數(shù)據(jù)來解決實際問題。

四種統(tǒng)計類型:

  1. 二值狀態(tài)統(tǒng)計;
  2. 聚合統(tǒng)計;
  3. 排序統(tǒng)計;
  4. 基數(shù)統(tǒng)計。

本文將用到 String、Set、Zset、List、hash 以外的拓展數(shù)據(jù)類型 Bitmap、HyperLogLog來實現(xiàn)。

今天我們來看下剩下的三種統(tǒng)計類型。

文章涉及到的指令可以通過在線 Redis 客戶端運行調(diào)試,地址:https://try.redis.io/,超方便的說。

基數(shù)統(tǒng)計

?

基數(shù)統(tǒng)計:統(tǒng)計一個集合中不重復(fù)元素的個數(shù),常見于計算獨立用戶數(shù)(UV)。

實現(xiàn)基數(shù)統(tǒng)計最直接的方法,就是采用集合(Set)這種數(shù)據(jù)結(jié)構(gòu),當(dāng)一個元素從未出現(xiàn)過時,便在集合中增加一個元素;如果出現(xiàn)過,那么集合仍保持不變。

當(dāng)頁面訪問量巨大,就需要一個超大的 Set 集合來統(tǒng)計,將會浪費大量空間。

另外,這樣的數(shù)據(jù)也不需要很精確,到底有沒有更好的方案呢?

這個問題問得好,Redis 提供了 HyperLogLog 數(shù)據(jù)結(jié)構(gòu)就是用來解決種種場景的統(tǒng)計問題。

HyperLogLog 是一種不精確的去重基數(shù)方案,它的統(tǒng)計規(guī)則是基于概率實現(xiàn)的,標(biāo)準(zhǔn)誤差 0.81%,這樣的精度足以滿足 UV 統(tǒng)計需求了。

關(guān)于 HyperLogLog 的原理過于復(fù)雜,如果想要了解的請移步:

  • https://www.zhihu.com/question/53416615
  • https://en.wikipedia.org/wiki/HyperLogLog

網(wǎng)站的 UV

通過 Set 實現(xiàn)

一個用戶一天內(nèi)多次訪問一個網(wǎng)站只能算作一次,所以很容易就想到通過 Redis 的 Set 集合來實現(xiàn)。

用戶編號 89757 訪問 「Redis 為什么這么快 」時,我們將這個信息放到 Set 中。

SADDRedis為什么這么快:uv89757

當(dāng)用戶編號 89757 多次訪問「Redis 為什么這么快」頁面,Set 的去重功能能保證不會重復(fù)記錄同一個用戶 ID。

通過 SCARD 命令,統(tǒng)計「Redis 為什么這么快」頁面 UV。指令返回一個集合的元素個數(shù)(也就是用戶 ID)。

SCARDRedis為什么這么快:uv

通過 Hash 實現(xiàn)

?

還可以利用 Hash 類型實現(xiàn),將用戶 ID 作為 Hash 集合的 key,訪問頁面則執(zhí)行 HSET 命令將 value 設(shè)置成 1。

即使用戶重復(fù)訪問,重復(fù)執(zhí)行命令,也只會把這個 userId 的值設(shè)置成 “1"。

最后,利用 HLEN 命令統(tǒng)計 Hash 集合中的元素個數(shù)就是 UV。

如下:

HSETredis集群:uvuserId:897571
//統(tǒng)計UV
HLENredis集群

HyperLogLog 王者方案

?

Set 雖好,如果文章非?;鸨_(dá)到千萬級別,一個 Set 就保存了千萬個用戶的 ID,頁面多了消耗的內(nèi)存也太大了。同理,Hash數(shù)據(jù)類型也是如此。咋辦呢?

利用 Redis 提供的 HyperLogLog 高級數(shù)據(jù)結(jié)構(gòu)(不要只知道 Redis 的五種基礎(chǔ)數(shù)據(jù)類型了)。這是一種用于基數(shù)統(tǒng)計的數(shù)據(jù)集合類型,即使數(shù)據(jù)量很大,計算基數(shù)需要的空間也是固定的。

每個 HyperLogLog 最多只需要花費 12KB 內(nèi)存就可以計算 2 的 64 次方個元素的基數(shù)。

Redis 對 HyperLogLog 的存儲進(jìn)行了優(yōu)化,在計數(shù)比較小的時候,存儲空間采用系數(shù)矩陣,占用空間很小。

只有在計數(shù)很大,稀疏矩陣占用的空間超過了閾值才會轉(zhuǎn)變成稠密矩陣,占用 12KB 空間。

PFADD

將訪問頁面的每個用戶 ID 添加到 HyperLogLog 中。

PFADDRedis主從同步原理:uvuserID1userID2useID3

PFCOUNT

利用 PFCOUNT 獲取 「Redis主從同步原理」頁面的 UV值。

PFCOUNTRedis主從同步原理:uv

PFMERGE 使用場景

HyperLogLog 除了上面的 PFADDPFCOIUNT 外,還提供了 PFMERGE ,將多個 HyperLogLog 合并在一起形成一個新的 HyperLogLog 值。

語法

PFMERGEdestkeysourcekey[sourcekey...]

使用場景

比如在網(wǎng)站中我們有兩個內(nèi)容差不多的頁面,運營說需要這兩個頁面的數(shù)據(jù)進(jìn)行合并。

其中頁面的 UV 訪問量也需要合并,那這個時候 PFMERGE 就可以派上用場了,也就是同樣的用戶訪問這兩個頁面則只算做一次 。

如下所示:Redis、MySQL 兩個 Bitmap 集合分別保存了兩個頁面用戶訪問數(shù)據(jù)。

PFADDRedis數(shù)據(jù)user1user2user3
PFADDMySQL數(shù)據(jù)user1user2user4
PFMERGE數(shù)據(jù)庫Redis數(shù)據(jù)MySQL數(shù)據(jù)
PFCOUNT數(shù)據(jù)庫//返回值=4

將多個 HyperLogLog 合并(merge)為一個 HyperLogLog , 合并后的 HyperLogLog 的基數(shù)接近于所有輸入 HyperLogLog 的可見集合(observed set)的并集 。

user1、user2 都訪問了 Redis 和 MySQL,只算訪問了一次。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

排序統(tǒng)計

Redis 的 4 個集合類型中(List、Set、Hash、Sorted Set),List 和 Sorted Set 就是有序的。

  • List:按照元素插入 List 的順序排序,使用場景通常可以作為 消息隊列、最新列表、排行榜;
  • Sorted Set:根據(jù)元素的 score 權(quán)重排序,我們可以自己決定每個元素的權(quán)重值。使用場景(排行榜,比如按照播放量、點贊數(shù))。

最新評論列表

?

我可以利用 List 插入的順序排序?qū)崿F(xiàn)評論列表

比如公 眾號的后臺回復(fù)列表(不要杠,舉例子),每一公 眾號對應(yīng)一個 List,這個 List 保存該公 眾號的所有的用戶評論。

每當(dāng)一個用戶評論,則利用 LPUSH key value [value ...] 插入到 List 隊頭。

LPUSH碼哥字節(jié)123456

接著再用 LRANGE key star stop 獲取列表指定區(qū)間內(nèi)的元素。

>LRANGE碼哥字節(jié)04
1)"6"
2)"5"
3)"4"
4)"3"
5)"2"

注意,并不是所有最新列表都能用 List 實現(xiàn),對于因為對于頻繁更新的列表,list類型的分頁可能導(dǎo)致列表元素重復(fù)或漏掉。

比如當(dāng)前評論列表 List ={A, B, C, D},左邊表示最新的評論,D 是最早的評論。

LPUSH碼哥字節(jié)DCBA

展示第一頁最新 2 個評論,獲取到 A、B:

LRANGE碼哥字節(jié)01
1)"A"
2)"B"

按照我們想要的邏輯來說,第二頁可通過 LRANGE 碼哥字節(jié) 2 3 獲取 C,D。

如果在展示第二頁之前,產(chǎn)生新評論 E,評論 E 通過 LPUSH 碼哥字節(jié) E 插入到 List 隊頭,List = {E, A, B, C, D }。

現(xiàn)在執(zhí)行 LRANGE 碼哥字節(jié) 2 3 獲取第二頁評論發(fā)現(xiàn), B 又出現(xiàn)了。

LRANGE碼哥字節(jié)23
1)"B"
2)"C"

出現(xiàn)這種情況的原因在于 List 是利用元素所在的位置排序,一旦有新元素插入,List = {E,A,B,C,D}。

原先的數(shù)據(jù)在 List 的位置都往后移動一位,導(dǎo)致讀取都舊元素。

5d6a28ea-3a3d-11ed-9e49-dac502259ad0.pngList最新列表

小結(jié)

只有不需要分頁(比如每次都只取列表的前 5 個元素)或者更新頻率低(比如每天凌晨統(tǒng)計更新一次)的列表才適合用 List 類型實現(xiàn)。

對于需要分頁并且會頻繁更新的列表,需用使用有序集合 Sorted Set 類型實現(xiàn)。

另外,需要通過時間范圍查找的最新列表,List 類型也實現(xiàn)不了,需要通過有序集合 Sorted Set 類型實現(xiàn),如以成交時間范圍作為條件來查詢的訂單列表。

排行榜

?

對于最新列表的場景,List 和 Sorted Set 都能實現(xiàn),為啥還用 List 呢?直接使用 Sorted Set 不是更好,它還能設(shè)置 score 權(quán)重排序更加靈活。

原因是 Sorted Set 類型占用的內(nèi)存容量是 List 類型的數(shù)倍之多,對于列表數(shù)量不多的情況,可以用 Sorted Set 類型來實現(xiàn)。

比如要一周音樂榜單,我們需要實時更新播放量,并且需要分頁展示。

除此以外,排序是根據(jù)播放量來決定的,這個時候 List 就無法滿足了。

我們可以將音樂 ID 保存到 Sorted Set 集合中,score 設(shè)置成每首歌的播放量,該音樂每播放一次則設(shè)置 score = score +1。

ZADD

比如我們將《青花瓷》和《花田錯》播放量添加到 musicTop 集合中:

ZADDmusicTop100000000青花瓷8999999花田錯

ZINCRBY

《青花瓷》每播放一次就通過 ZINCRBY指令將 score + 1。

>ZINCRBYmusicTop1青花瓷
100000001

ZRANGEBYSCORE

最后我們需要獲取 musicTop 前十 播放量音樂榜單,目前最大播放量是 N ,可通過如下指令獲?。?/p>

ZRANGEBYSCOREmusicTopN-9NWITHSCORES

?

65哥:可是這個 N 我們怎么獲取呀?

ZREVRANGE

可通過 ZREVRANGE key start stop [WITHSCORES]指令。

其中元素的排序按 score 值遞減(從大到小)來排列。

具有相同 score 值的成員按字典序的逆序(reverse lexicographical order)排列。

>ZREVRANGEmusicTop00WITHSCORES
1)"青花瓷"
2)100000000

小結(jié)

即使集合中的元素頻繁更新,Sorted Set 也能通過 ZRANGEBYSCORE命令準(zhǔn)確地獲取到按序排列的數(shù)據(jù)。

在面對需要展示最新列表、排行榜等場景時,如果數(shù)據(jù)更新頻繁或者需要分頁顯示,建議優(yōu)先考慮使用 Sorted Set。

推薦下自己做的 Spring Cloud 的實戰(zhàn)項目:

https://github.com/YunaiV/onemall

聚合統(tǒng)計

指的就是統(tǒng)計多個集合元素的聚合結(jié)果,比如說:

  • 統(tǒng)計多個元素的共有數(shù)據(jù)(交集);
  • 統(tǒng)計兩個集合其中的一個獨有元素(差集統(tǒng)計);
  • 統(tǒng)計多個集合的所有元素(并集統(tǒng)計)。

?

什么樣的場景會用到交集、差集、并集呢?

Redis 的 Set 類型支持集合內(nèi)的增刪改查,底層使用了 Hash 數(shù)據(jù)結(jié)構(gòu),無論是 add、remove 都是 O(1) 時間復(fù)雜度。

并且支持多個集合間的交集、并集、差集操作,利用這些集合操作,解決上邊提到的統(tǒng)計問題。

交集-共同好友

比如 QQ 中的共同好友正是聚合統(tǒng)計中的交集。我們將賬號作為 Key,該賬號的好友作為 Set 集合的 value。

模擬兩個用戶的好友集合:

SADDuser:碼哥字節(jié)R大Linux大神PHP之父
SADDuser:大佬Linux大神Python大神C++菜雞

5d8cc40e-3a3d-11ed-9e49-dac502259ad0.png交集

統(tǒng)計兩個用戶的共同好友只需要兩個 Set 集合的交集,如下命令:

SINTERSTOREuser:共同好友user:碼哥字節(jié)user:大佬

命令的執(zhí)行后,「user:碼哥字節(jié)」、「user:大佬」兩個集合的交集數(shù)據(jù)存儲到 user:共同好友這個集合中。

差集-每日新增好友數(shù)

比如,統(tǒng)計某個 App 每日新增注冊用戶量,只需要對近兩天的總注冊用戶量集合取差集即可。

比如,2021-06-01 的總注冊用戶量存放在 key = user:20210601 set 集合中,2021-06-02 的總用戶量存放在 key = user:20210602 的集合中。

5dad4b98-3a3d-11ed-9e49-dac502259ad0.pngset差集

如下指令,執(zhí)行差集計算并將結(jié)果存放到 user:new 集合中。

SDIFFSTOREuser:newuser:20210602user:20210601

執(zhí)行完畢,此時的 user:new 集合將是 2021/06/02 日新增用戶量。

除此之外,QQ 上有個可能認(rèn)識的人功能,也可以使用差集實現(xiàn),就是把你朋友的好友集合減去你們共同的好友即是可能認(rèn)識的人。

并集-總共新增好友

還是差集的例子,統(tǒng)計 2021/06/01 和 2021/06/02 兩天總共新增的用戶量,只需要對兩個集合執(zhí)行并集。

SUNIONSTOREuserid:newuser:20210602user:20210601

此時新的集合 userid:new 則是兩日新增的好友。

小結(jié)

Set 的差集、并集和交集的計算復(fù)雜度較高,在數(shù)據(jù)量較大的情況下,如果直接執(zhí)行這些計算,會導(dǎo)致 Redis 實例阻塞。

所以,可以專門部署一個集群用于統(tǒng)計,讓它專門負(fù)責(zé)聚合計算,或者是把數(shù)據(jù)讀取到客戶端,在客戶端來完成聚合統(tǒng)計,這樣就可以規(guī)避由于阻塞導(dǎo)致其他服務(wù)無法響應(yīng)。


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40148
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1208

    瀏覽量

    24725
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    376

    瀏覽量

    10883

原文標(biāo)題:實戰(zhàn)!Redis 巧用數(shù)據(jù)類型實現(xiàn)億級數(shù)據(jù)統(tǒng)計!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    西門子博途新數(shù)據(jù)類型之:SINT(8位整數(shù))

    數(shù)據(jù)類型 SINT (Short INT) 的操作數(shù)長度為 8 位,由以下兩部分組成:一部分是符號,另一部分是數(shù)值。位 0 到 6 的信號狀態(tài)表示數(shù)值。位 7 的信號狀態(tài)表示符號。符號可以是“0”(正信號狀態(tài)),或“1”(負(fù)信號狀態(tài))。
    的頭像 發(fā)表于 11-09 09:52 ?1042次閱讀
    西門子博途新<b class='flag-5'>數(shù)據(jù)類型</b>之:SINT(8位整數(shù))

    AIC23采集到的數(shù)據(jù)是應(yīng)該用什么數(shù)據(jù)類型來接收?int還是unsigned int?

    AIC23采集到的數(shù)據(jù)是應(yīng)該用什么數(shù)據(jù)類型來接收,int還是unsigned int? 這個采集到的數(shù)字是什么含義呢?代表的是聲音信號的幅值? while(!MCBSP_rrdy(hMcbsp
    發(fā)表于 10-18 06:56

    labview數(shù)據(jù)類型的取值范圍是多少

    LabVIEW的數(shù)據(jù)類型豐富多樣,涵蓋了整數(shù)、小數(shù)(浮點數(shù))、復(fù)數(shù)等多種類型,每種類型都有其特定的取值范圍。以下是對LabVIEW中常見數(shù)據(jù)類型取值范圍的說明: 整數(shù)
    的頭像 發(fā)表于 09-04 17:33 ?1129次閱讀

    常見的遙感數(shù)據(jù)類型有哪些

    遙感技術(shù)是一種通過遙感器在遠(yuǎn)離目標(biāo)的位置獲取目標(biāo)地物的電磁波信息,并進(jìn)行分析的技術(shù)。遙感數(shù)據(jù)類型繁多,涵蓋了從可見光到紅外、微波等多個波段,以及不同的數(shù)據(jù)格式和分辨率。 光學(xué)遙感數(shù)據(jù) : 全色影像
    的頭像 發(fā)表于 09-04 14:30 ?1726次閱讀

    人體紅外傳感器的數(shù)據(jù)類型及工作原理

    人體紅外傳感器是一種利用紅外技術(shù)檢測人體活動和位置的傳感器。它廣泛應(yīng)用于安防、智能家居、醫(yī)療健康等領(lǐng)域。 人體紅外傳感器的數(shù)據(jù)類型 人體紅外傳感器的數(shù)據(jù)主要包括以下幾種類型: 1.1 溫度數(shù)據(jù)
    的頭像 發(fā)表于 08-20 09:18 ?872次閱讀

    恒訊科技分析:云數(shù)據(jù)庫rds和redis區(qū)別是什么如何選擇?

    數(shù)據(jù)庫RDS(Relational Database Service)和Redis是兩種不同類型數(shù)據(jù)庫服務(wù),它們有各自的特點和適用場景: 1、數(shù)
    的頭像 發(fā)表于 08-19 15:31 ?408次閱讀

    技術(shù)干貨驛站 ▏深入理解C語言:基本數(shù)據(jù)類型和變量

    在C語言中,數(shù)據(jù)類型和變量是編程的基礎(chǔ),也是理解更復(fù)雜概念的關(guān)鍵。數(shù)據(jù)類型決定了變量的內(nèi)存分配、存儲范圍和操作方式,而變量則是存儲數(shù)據(jù)的容器。本篇文章將從基本數(shù)據(jù)類型和變量兩個方面,帶
    的頭像 發(fā)表于 07-26 17:53 ?2170次閱讀
    技術(shù)干貨驛站 ▏深入理解C語言:基本<b class='flag-5'>數(shù)據(jù)類型</b>和變量

    天拓四方:工業(yè)級數(shù)據(jù)采集網(wǎng)關(guān)核心功能解析與應(yīng)用價值

    將深入解析工業(yè)級數(shù)據(jù)采集網(wǎng)關(guān)的核心功能,探討其如何助力企業(yè)實現(xiàn)智能化升級,并闡述其在實際應(yīng)用中的顯著價值。 一、工業(yè)級數(shù)據(jù)采集網(wǎng)關(guān)的定義與特點 工業(yè)級數(shù)據(jù)采集網(wǎng)關(guān)是一種專為工業(yè)環(huán)境設(shè)計
    的頭像 發(fā)表于 07-23 16:11 ?343次閱讀

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.preferences (首選項)】

    首選項為應(yīng)用提供key-value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級數(shù)據(jù),并對其修改和查詢。數(shù)據(jù)存儲形式為鍵值對,鍵的類型為字符串型,值的存儲
    的頭像 發(fā)表于 06-10 18:46 ?1695次閱讀

    ESP32-S3是否支持修改控制端點數(shù)據(jù)類型?

    ESP32-S3是否支持修改控制端點數(shù)據(jù)類型(如標(biāo)準(zhǔn)類型,自定義類型); 我需要在控制傳輸數(shù)據(jù)階段的DATA0包改為我的USB設(shè)備規(guī)定的8個字節(jié)的數(shù)
    發(fā)表于 06-07 06:00

    GeminiDB 新特性:讓 Redis 廣告頻控愛不釋手的 exHASH

    exHash 類型是一種支持 Field 過期的新型數(shù)據(jù)類型,它在原先的 Hash 類型基礎(chǔ)上進(jìn)行了擴(kuò)展:在支持 Hash 類型的通用功能以外,exHash
    的頭像 發(fā)表于 04-08 18:26 ?1050次閱讀
    GeminiDB 新特性:讓 <b class='flag-5'>Redis</b> 廣告頻控愛不釋手的 exHASH

    數(shù)據(jù)安全沒保障?GaussDB(for Redis) 為你保駕護(hù)航

    未知的 key,實際上可能面臨數(shù)據(jù)庫信息丟失和記錄篡改的風(fēng)險。 作為一個重視技術(shù)的團(tuán)隊,我們始終將用戶信息安全和使用體驗放在第一位。對于這次用戶使用開源 Redis 遇到的問題,我們盤點了 GaussDB(for Redis)精
    的頭像 發(fā)表于 03-28 22:09 ?682次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>安全沒保障?GaussDB(for <b class='flag-5'>Redis</b>) 為你保駕護(hù)航

    GaussDB(for Redis) 特性揭秘:多租戶管理

    鑒權(quán)能力,即可約束每個賬號可訪問的數(shù)據(jù)庫(DB)范圍,避免誤操作其他租戶數(shù)據(jù)。該特性可以幫助企業(yè)在共享 Redis 實例的情況下,保護(hù)不同租戶的
    的頭像 發(fā)表于 03-28 22:06 ?753次閱讀
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:多租戶管理

    GaussDB(for Redis) 游戲?qū)嵺`:玩家下線行為上報

    實現(xiàn)以上功能時,感知用戶下線行為延遲較大,導(dǎo)致上報時間不準(zhǔn)確。華為云 GaussDB(for Redis)作為一款企業(yè)游戲數(shù)據(jù)庫,具備卓越的企業(yè)
    的頭像 發(fā)表于 03-28 22:03 ?531次閱讀

    C語言數(shù)據(jù)類型有哪些

    在 C 語言中,數(shù)據(jù)類型指的是用于聲明不同類型的變量或函數(shù)的一個廣泛的系統(tǒng)。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。
    發(fā)表于 03-20 10:56 ?488次閱讀
    C語言<b class='flag-5'>數(shù)據(jù)類型</b>有哪些