redis bitmap實現去重

2021-08-19 20:11:48 字數 667 閱讀 4210

最近做乙個探針專案,需要判斷使用者是不是第一次被採集,原來直接使用redis的key-value第一次快取,過了段時間發現這樣key會無窮無盡。。

使用布隆演算法實現去重,布隆演算法參考:漫畫:bitmap演算法 整合版

具體實現,針對具體使用者的mac做hash,hash生成的結果作為bitmap的offset,bitmap即位圖,每位儲存0或1,1標識已經存在

bitmap最多可以儲存2的32次方,即4294967296,完全滿足當前需求

setbit key offset 1   //設定該位置為1

getbit key offset     //檢視該位置是否存在

bitcount key           //統計總儲存數

long offset = md5util.filterhash(probeentity.getphonemac());

if(redisserviceimpl.getbit(constants.new_user_key,offset))else

@override

public boolean getbit(string key, long offset)

@override

public void addbit(string key, long offset)

陣列去重實現

let arr 1,2,3,4,5,1,2,3,4,5 let a new set arr console.log a let arr 1,2,3,4,5,1,2,3,4,5 let a arr.foreach item,index,arr console.log a 思路 1 建立乙個新的陣列存放...

基於Redis bitmap實現簽到功能

需求場景 bitmap 對於一些特定型別的計算非常有效。比如說,每當使用者在某一天上線的時候,我們就使用setbit,以使用者名稱作為key,將那天所代表的 的上線日作為offset 引數,並將這個offset 上的為設定為1。舉個例子,如果今天是 上線的第100天,而使用者 uid 10086 在...

JS實現陣列去重

方法一,利用物件屬性不能相同的方法進行去重 array.prototype.distinct function result len arr.length for i 0 i arr.length i return result var a 1,2,3,4,5,6,5,3,2,4,56,4,1,2,...