获取两个数据的交集_Redis学习笔记统计该如何选择数据类型
在業務場景中經常需要統計,如某直播累計觀看人數、獨立訪客人數、歷史總觀看人數等等,再比如要統計某學生某月的簽到情況等,遇到統計的情況,就需要思考如何合理地選擇?Redis?數據類型,這篇文章學習一下各種統計的業務場景和分類,這樣就能很容易的對應各種統計需求了。
1.筆記圖
2.Redis 聚合統計
2.1 場景
交集統計:統計多個集合的共有元素
差集統計:統計一個集合相比于另一個集合有車別的元素
并集統計:統計多個集合的所有元素
2.2 舉例
記錄所有登錄過的用戶ID:
記錄某天所有登錄過的用戶ID:
記錄某天新增的用戶ID:如記錄?1?月?4?日和?1?月?5?日所有用戶?ID,求它們差集合就是新增用戶,求差集命令:
SDIFFSTORE user_new user_id_20200804 user_id_20200803Tips:表示將?user_id_20200804?集合和?user_id?集合求差集,并保存至?user_new?集合中,可表示?20200804?這個日期的新增用戶數。
記錄某天留存下的用戶ID:如記錄?1?月?4?日和?1?月?5?日所有用戶?ID,然后求它們交集就是當日留存用戶,求交集命令:
SINTERSTORE user_new user_id_20200804 user_id_20200803Tips:表示將?user_id_20200804?集合和?user_id?集合求交集,并保存至?user_new?集合中,可表示?20200804?留存的用戶數。
2.3 優化建議
Set?的差集、并集和交集的計算復雜度較高,直接執行這些計算,會導致?Redis?實例阻塞
可以從主從集群中選擇一個從庫,讓它專門負責聚合計算,或者是把數據讀取到客戶端,在客戶端來完成聚合統計
3.排序統計舉例
獲取最新評論列表:按評論時間的先后給每條評論設置一個權重值,然后再把評論保存到?Sorted Set?中
ZRANGEBYSCORE comments N-9 N
4.二值狀態
統計 ID 3000 的用戶在 2020 年 8 月份的簽到情況:
統計?ID 3000?的用戶在?2020?年?8?月份的簽到情況
SETBIT uid_sign_3000_202008 2 1檢查該用戶?8?月?3?日是否簽到
GETBIT uid_sign_3000_202008 2統計該用戶在?8?月份的簽到次數
BITCOUNT uid_sign_3000_202008
如果記錄了 1 億個用戶 10 天的簽到情況,你有辦法統計出這 10 天連續簽到的用戶總數嗎?:
把每天的日期作為?key,每個?key?對應一個?1?億位的?Bitmap,每一個?bit?對應一個用戶當天的簽到情況
對?10?個?Bitmap?做?與?操作,得到的結果也是一個?Bitmap
BITCOUNT?統計下?Bitmap?中的?1?的個數,這就是連續簽到?10?天的用戶總數了
5.基數統計舉例
統計某個網頁一天的獨立訪客(UV):HyperLogLog
PFCOUNT uv_20180808
PFADD uv_20180808 user1 user2 user3 user4 user5
統計結果是有一定誤差的,標準誤算率是?0.81%,但是它非常節省空間
6.各個數據類型統計
關聯文章:Redis學習筆記-String數據類型及其節省空間優化Redis學習筆記-切片集群Redis ClusterRedis學習筆記-哨兵機制&哨兵集群建立過程Redis學習筆記-主從庫如何實現數據同步一致Redis學習筆記-高性能IO模型&Redis6.0多線程Redis學習筆記-哈希桶和底層數據結構Redis學習筆記-數據類型和操作(動手試試)
總結
以上是生活随笔為你收集整理的获取两个数据的交集_Redis学习笔记统计该如何选择数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python __import__和im
- 下一篇: c语言结构体 单科成绩排序,【查错】怎