91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

redis怎么去重字符串

小新
225
2021-01-19 08:09:15
欄目: 云計算

redis怎么去重字符串

redis去重字符串的示例:

基于Redis實現Bloomfilter去重,代碼如下:


# encoding=utf-8


importredis


fromhashlibimportmd5


classSimpleHash(object):


def__init__(self,cap,seed):


self.cap=cap


self.seed=seed


defhash(self,value):


ret=0


foriinrange(len(value)):


ret+=self.seed*ret+ord(value[i])


return(self.cap-1)&ret


classBloomFilter(object):


def__init__(self,host='localhost',port=6379,db=0,blockNum=1,key='bloomfilter'):


"""


:param host: the host of Redis


:param port: the port of Redis


:param db: witch db in Redis


:param blockNum: one blockNum for about 90,000,000; if you have more strings for filtering, increase it.


:param key: the key's name in Redis


"""


self.server=redis.Redis(host=host,port=port,db=db)


self.bit_size=1<<31# Redis的String類型最大容量為512M,現使用256M


self.seeds=[5,7,11,13,31,37,61]


self.key=key


self.blockNum=blockNum


self.hashfunc=[]


forseedinself.seeds:


self.hashfunc.append(SimpleHash(self.bit_size,seed))


defisContains(self,str_input):


ifnotstr_input:


returnFalse


m5=md5()


m5.update(str_input)


str_input=m5.hexdigest()


ret=True


name=self.key+str(int(str_input[0:2],16)%self.blockNum)


forfinself.hashfunc:


loc=f.hash(str_input)


ret=ret&self.server.getbit(name,loc)


returnret


definsert(self,str_input):


m5=md5()


m5.update(str_input)


str_input=m5.hexdigest()


name=self.key+str(int(str_input[0:2],16)%self.blockNum)


forfinself.hashfunc:


loc=f.hash(str_input)


self.server.setbit(name,loc,1)


if__name__=='__main__':


""" 第一次運行時會顯示 not exists!,之后再運行會顯示 exists! """


bf=BloomFilter()


ifbf.isContains('http://www.baidu.com'):# 判斷字符串是否存在


print'exists!'


else:


print'not exists!'


bf.insert('http://www.baidu.com')



0
巧家县| 靖江市| 永德县| 塔城市| 仙桃市| 锦屏县| 大连市| 大庆市| 盐源县| 筠连县| 天柱县| 长沙市| 义马市| 奉贤区| 台北县| 东兴市| 额济纳旗| 漾濞| 昂仁县| 封丘县| 中超| 象山县| 宜川县| 黑龙江省| 洛川县| 晋中市| 绥芬河市| 仪陇县| 德清县| 明溪县| 鹤山市| 云阳县| 神农架林区| 化州市| 湘潭县| 岱山县| 古交市| 丹凤县| 浏阳市| 兰溪市| 化德县|