工做中有用到Redis濾重隊列。redis
原來的方法以下:算法
方法一數組
優勢:
簡單,直觀。性能
缺陷:編碼
方法二
爲了解決以上痛點,新玩法爲:code
getbit key offset
。若是存在說明隊列中存在一個這個offset的值,就不須要進行入隊操做,直接中斷執行就好。優勢:隊列
缺點:ip
int
,好比,long範圍的offset是不存在的,這是一個很重要
的點,必定要注意(都是血淚史)。總結
從上面的分析來看,感受方法二完勝方法一。其實不盡然,只能說各有不一樣的場景。
方法一比較通用,不論入隊的內容是什麼,均可能濾重,方法二依賴與Bitmap算法,意味key只能是數值型的元素。
在實際應用中,以上兩種濾重方式通常是能夠聯合使用的。若是key是數值類型,沒有超出int的取值範圍,那麼就直接使用方法二,若是超出了int的取值範圍的數值就使用方法一。rem
擴展
還有一種濾重的算法叫:布隆過濾器,感興趣的同窗能夠了解下:Bloom filter。若是不須要刪除,不在意誤判率的話那應該是很合適的一個算法,空間和時間都很高效。get
另外若是有人遇到過其餘的一些坑或者有更好的建議,歡迎指點。