利用Redis进行数据去重
2020-03-31 19:30
1121 查看
前言
之前有篇文章提到了实现增量爬虫可以利用redis数据库进行url去重,今天博主就给大家分享一下python如何利用redis进行去重吧。在试验中,我们用到Redis数据库和hash算法,我们先了解一下Redis和hashlib。
Redis简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 优势
- 读写速度极快,Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)。
- Redis可以将内存中的数据利用快照和日志的形式保存到硬盘上,这样发生类似断电或者机器故障的时候,内存中的数据不会丢失。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
hashlib简介
hash是一种算法,不同的hash算法只是复杂度不一样, hashlib中提供了SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,这些算法接受传入的内容,经过运算得到一串hash值
hashlib特点
- 传入的内容一样,得到的hash值必然一样。
- 不能由hash值返解成内容。
- 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的,可以节省内存。
以上就是对redis和hashlib的说明了,下面我们进行一些简单的试验,让大家能有更加深刻的了解。
程序分模块讲解
导入模块
import redis import hashlib
创建Redis类
连接Redis数据库需要提供主机号和端口号,不需要密码,同时需要指定连接的数据库号(redis中默认存在0-15号数据库),这里我们使用集合存储数据
host处需要大家提供主机号。
class Redis(): def __init__(self): self.con = redis.Redis( host='', #ip地址 port=6379, #端口号,默认为6379 db=15, decode_responses=True #设置为True存的数据格式就是str类型 ) def add(self,key,data): if self.exit(key,data): print("该数据已存在!") else: self.con.sadd(key,data) #添加 print("添加成功") def query(self,key): return self.con.smembers(key) #拿出key对应所有值 def delete(self,key): self.con.delete(key) #删除key键 def exit(self,key,data): return self.con.sismember(key, data) # 判断key里是否有data,有则返回true
创建hashlib类
class Hashencode(): def __init__(self): self.encode_machine = hashlib.md5() # 创建一个md5对象 def encode(self,url): self.encode_machine.update(url.encode()) #更新 url_encode = self.encode_machine.hexdigest() #拿到编码后的十六进制数据 return url_encode
有了以上两个类的基础,我们进行试验。
去重试验
实例化Redis和Hashlib对象
en = Hashencode() re = Redis()
我们要试验url的去重
url = "https://www.baidu.com/s?wd=keras%E5%AE%9E%E6%88%98&pn=10&oq=keras" \ "%E5%AE%9E%E6%88%98&ie=utf-8&rsv_pq=93a257f40023c669&rsv_" \ "t=bad6XI9Ya3l%2FJJCLby9vpq3gjNg%2" \ "FKPN9VTtXPhQTKdc1wdL%2FgQ4xNHxY5YU&rsv_page=1"
第一次存取
encode = en.encode(url) re.add("urls",encode) for i in re.query("urls"): print(i) """ 结果: 添加成功! 5d53585df507174ae1f1c3b39d272f52 """
第二次存取
re.add("urls",encode) for i in re.query("urls"): print(i) """ 结果: 该数据已存在! 5d53585df507174ae1f1c3b39d272f52 """
我们可以看到确实实现了去重效果。
以上就是博主今天和大家分享的内容了,希望大家能够将Redis和Hashlib作为一大利器使用,同时希望这篇文章能给大家带来一定的收获,祝大家学习进步!
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- 利用redis对不经常修改的数据库数据进行信息数据优化
- 利用MATLAB对Rosbag中数据的进行提取(特别是当bag中存在图片信息的时候)
- 利用WebClient进行数据抓取
- MySQL中利用索引对数据进行排序的基础教程
- 利用Python进行数据分析第二版复现(五)
- 利用seaborn进行数据分析(一)
- Python进阶(三十八)-数据可视化の利用matplotlib 进行折线图,直方图和饼图的绘制
- ML之XGBR:利用xgboost算法对Boston(波士顿房价)数据集【特征列分段→独热编码】进行回归预测(房价预测)++预测新数据得分
- 利用redis将数据存入数据库的PHP商品秒杀代码,很多功能待完善
- 利用wireshark进行手机数据包抓取
- 利用Python进行数据分析(14) pandas基础: 数据转换
- 利用XSL对XML数据进行加密和大小写转换
- 利用python调用elasticsearch-api来分析数据并作图进行日报邮件发送
- 利用shuf对数据记录进行随机采样
- 利用python进行数据分析D3——ch04INumpy
- Android利用Fiddler进行网络数据抓包
- CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据
- mysql 利用二进制日志进行数据恢复(mysqlbinlog)
- node.js利用redis数据库缓存数据的方法
- 使用rdb文件进行redis数据迁移--python脚本