一、Redis 简介与安装
Redis是一个开源的内存数据结构存储系统,常用于缓存、消息队列和数据存储。在爬虫中,Redis 常被用作:
- 任务队列(存储待爬取的 URL)
- 去重集合(记录已爬取的 URL)
- 分布式锁(协调多节点爬虫)
安装 Redis(以 Ubuntu 为例):
bash
# 安装Redis服务器
sudo apt update
sudo apt install redis-server
# 启动Redis服务
sudo systemctl start redis-server
# 验证服务状态
sudo systemctl status redis-server
Python 客户端安装:
bash
pip install redis
二、Redis 基本配置
Redis 配置文件位于/etc/redis/redis.conf
,常见配置项:
conf
# 绑定IP地址(默认仅本地访问)
bind 127.0.0.1
# 端口号
port 6379
# 密码认证(取消注释并设置密码)
# requirepass your_password_here
# 内存策略(当内存不足时的处理方式)
maxmemory-policy allkeys-lru
修改配置后重启服务:
bash
sudo systemctl restart redis-server
三、Python 操作 Redis 示例
下面是 Redis 在爬虫中的常见应用场景示例:
python-redis-crawlerPython爬虫使用Redis示例
V1
生成 redis_crawler_example.py
四、Redis 高级应用:分布式爬虫
对于大规模爬虫,可以使用 Redis 实现分布式协作:
python
# 分布式爬虫 worker 示例
import redis
import requests
import time
from multiprocessing import Process
def worker():
r = redis.Redis(host='localhost', port=6379)
queue_key = "crawler:task_queue"
while True:
# 阻塞式获取任务(支持多worker竞争)
_, task = r.brpop(queue_key, timeout=10)
if not task:
continue
try:
# 处理任务逻辑...
print(f"Worker {os.getpid()} 处理任务: {task}")
time.sleep(1) # 模拟处理时间
except Exception as e:
print(f"任务处理失败: {str(e)}")
# 启动多个worker进程
if __name__ == "__main__":
for _ in range(5): # 启动5个worker
p = Process(target=worker)
p.start()
五、Redis 监控与管理
-
命令行工具:
bash
# 连接Redis客户端 redis-cli # 查看键数量 KEYS * # 获取队列长度 LLEN crawler:task_queue # 查看集合成员数 SCARD crawler:visited_urls # 查看内存使用 INFO memory
-
可视化工具:
- RedisInsight(官方图形化工具)
- Another Redis Desktop Manager(开源跨平台工具)
六、注意事项
-
性能优化:
- 合理设置
maxmemory
和maxmemory-policy
避免内存溢出 - 使用管道 (Pipeline) 批量操作减少网络开销
- 合理设置
-
数据持久化:
- 在
redis.conf
中配置 RDB 或 AOF 持久化策略
conf
# RDB持久化(默认配置) save 900 1 save 300 10 save 60 10000 # AOF持久化(更安全但性能稍低) appendonly yes
- 在
-
安全建议:
- 禁止外网直接访问 Redis 服务
- 设置强密码并启用 TLS 加密
- 定期备份数据
通过 Redis 的高效数据结构,爬虫可以实现任务调度、去重和分布式协作,大幅提升爬取效率和稳定性。