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