一種千萬級用戶實時統(tǒng)計用戶數(shù)的簡單實現(xiàn)
場景:微信小程序注冊用戶已經(jīng)接近千萬,而且分為實名用戶和非實名用戶,openId為小程序的用戶id,一個實名用戶可以有多個微信,所以可以多次注冊,但是實名信息為同一個人。
需求:實時顯示用戶增長量,實名用戶量,實名去重用戶數(shù),最近七日的用戶變化曲線等。
實現(xiàn):spring aop + redis atomlong + crontab shell腳本
思路:
1、每天凌晨3點執(zhí)行一次定時任務(wù),從msyql從庫讀取用戶數(shù)據(jù),做以上處理,然后獲得統(tǒng)計數(shù)據(jù)作為基準值,寫入redis。
2、aop對用戶表的update、insert操做進行攔截處理,由于業(yè)務(wù)場景一般對用戶都是邏輯刪除,所以不需要去切delete操作。
3、根據(jù)update中的實名參數(shù)信息判斷該次update是不是實名數(shù)據(jù)更新,通過實時根據(jù)身份證去查之前該用戶是否已經(jīng)有其他微信號進行過實名(這里有一次數(shù)據(jù)庫的交互,對身份證號要建索引)。
insert操作肯定是用戶的增長,這個很好理解。
4、redis中根據(jù)業(yè)務(wù)key+日期的方式對一周內(nèi)數(shù)據(jù)進行緩存,用于頁面展示一周用戶增長曲線。
5、具體切面的核心代碼如下: