redis很多應用都有其他更有的選擇,統一放一起。
hyperloglog
hyperloglog 提供不精確的去重計數方案,雖然不精確但是也不是非常不精確,標準誤差是 0.81%。
老錢在《redis深度歷險:核心原理和應用實踐》,用**的uv來舉例,但是我們日常專案中,除非小公司,一般的公司都會有bi部門,使用大資料(hbase hive nova)那一套專門處理pv,uv等資料,畢竟現在市場就是大資料,各個公司還是很重視的。老闆需要根據pv uv 判斷某個產品值不值得繼續投錢做,產品需要根據它調整方案。
hyperloglog的強大不在於去重,因為set也可以做到,強大在於redis 對 hyperloglog 的儲存進行了優化,在計數比較小時,它的儲存空間採用稀疏矩陣儲存,空間占用很小,僅僅在計數慢慢變大,稀疏矩陣占用空間漸漸超過了閾值時才會一次性轉變成稠密矩陣,才會占用 12k 的空間(它需要佔據一定 12k 的儲存空間,所以它不適合統計單個使用者相關的資料。如果你的使用者上億,可以算算,這個空間成本是非常驚人的。但是相比 set 儲存方案,hyperloglog 所使用的空間那真是可以使用千斤對比四兩來形容了)
三個命令
pfadd key v1
pfcount key
pfmerge 用於將多個 pf 計數值累加在一起形成乙個新的 pf 值
底層記憶體模型實現原理,現在沒有興趣。很複雜。
總的來說:hyperloglog 資料結構來進行估數,它非常有價值,可以解決很多精確度不高的統計需求
布隆過濾器
比hyperloglog更強大,因為有個命令contains 判斷某個元素在不在。
布隆過濾器的initial_size估計的過大,會浪費儲存空間,估計的過小,就會影響準確率,使用者在使用之前一定要盡可能地精確估計好元素數量,還需要加上一定的冗餘空間以避免實際元素可能會意外高出估計值很多。
布隆過濾器的error_rate越小,需要的儲存空間就越大,對於不需要過於精確的場合,error_rate設定稍大一點也無傷大雅。
限流
簡單的限流可以根據zset的score來模擬時間視窗來實現,
漏斗限流
redis-cell的運用
其他限流機制:
geohash
這個在專案中可以用,附近的人,等用到了再看。
scan
模糊匹配查詢key,一般的公司線上不會開放。
Redis系統學習 應用 佇列
此處可分為,訊息佇列 和 延時佇列 訊息佇列 專案中經常用到訊息機制,mq和kafka都很成熟了,所以某些專門的訊息處理還是交給他們。但是專案中有的只需要自己發自己收,實現非同步處理,redis也可以實現。基於list,當成佇列使用。此處有個問題,佇列空了就會出現,無效的查詢,業務系統的cpu增加負...
redis系統學習
redis是乙個開源的 高效能的 基於鍵值對的快取與儲存系統,通過提供多種鍵值資料 型別來適應不同場景下的快取與儲存需求。同時 redis 的諸多高層級功能使其可以勝任訊息 佇列 任務佇列等不同的角色。redis是remote dictionary server 遠端字典伺服器 的縮寫。a.以字典結...
Ubuntu系統學習
分割槽 檔案系統型別 預設為 ext4,檔案系統分很多種,ext2 ext3 ext4 fat ntfs等等 什麼是檔案系統 檔案系統是作業系統用於明確磁碟或分割槽上的檔案的方法和資料結構 即在磁碟上組織檔案的方法。兩種檔案系統的對比 linux目錄結構 所有目錄都在 boot boot 配置檔案 ...