文章、博客、商品的點擊量功能的高負載實現(xiàn)

文章、博客、商品等功能經(jīng)常需要一個字段統(tǒng)計用戶的點擊量(訪問量),該字段通常需要持久化到數(shù)據(jù)庫中,但數(shù)據(jù)庫是不適合直接應對用戶操作,這種場量如何實現(xiàn)高負載?

主流的系統(tǒng)高負載解決方案,通常把數(shù)據(jù)同步到分布式的ES,多節(jié)點的 Redis 集群中。但點擊量這個字段,需要在頁面中實時展示,用戶刷新頁面時,需要直觀的看到點擊量的變化。

我們首先能想到的,是將點擊量直接存入Redis,展示頁面時從Redis實時讀取,并實時累加,

鍵名格式:article : [id] : hits

鍵值格式:點擊量

這樣設計僅為滿足點擊量功能問題不大,俚進一步的需求來了:熱門文章,熱門商品等功能,需要跟據(jù)點擊量進行排序,或者聚合更多字段進行查詢。因此,點擊量還是是需要更新到數(shù)據(jù)庫和ES中的。但又不能實時更新,因此可以在 redis 存儲點擊量時,增加一個計數(shù)器,當計數(shù)器未到達臨界值時,僅累加Redis,不寫入數(shù)據(jù)庫,當計數(shù)器到達臨界值時,寫入數(shù)據(jù)庫,計數(shù)器歸0

鍵名格式:article : [id] : hits(示例值:article:10:hits)

鍵值格式:點擊量,計數(shù)器(示例值:123,10,表示當前點擊量為123,計數(shù)器為10)

下次訪問后,示例值變?yōu)椋?24,11,表示當前點擊量為124,11,計數(shù)器為11。

當計數(shù)器值到達 1000 時(示例值為:1113,1000),計數(shù)據(jù)歸 0 (1113,0),將 1113 更新到數(shù)據(jù)庫并觸發(fā)ES更新

流程圖如下:


另外,還可以進一步簡化設計,不設置計數(shù)器,用點擊量取模臨界值(點擊量 % 臨界值 === 0),余數(shù)為0時更新數(shù)據(jù)庫。

本文原始網(wǎng)址:https://www.liu12.com/article/hits-function-ha,轉(zhuǎn)載請保留出處

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容