Web 代理、爬行器和爬虫

news/2024/12/25 10:16:20 标签: 前端, 爬虫
(一)Web 在线网页代理服务器的使用方法
1. 什么是 Web 在线网页代理服务器

Web 在线网页代理服务器就像是网络穿越仪一般,它是一种具有转发功能的应用程序,能够帮助用户在特定网络环境下访问被封锁的网页。用户在某些网络环境中可能无法直接访问特定的网页资源,而通过 Web 在线网页代理服务器,用户的请求可以被转发到目标网站,然后将目标网站的响应返回给用户,从而实现对被封锁网页的访问。

2. 使用流程详解

使用 Web 在线网页代理服务器的具体步骤如下:

首先,寻找可靠的代理服务器网站或服务提供商。用户可以通过网络搜索等方式找到一些信誉良好的代理服务器站点,比如一些知名的在线代理服务平台。

接着,打开代理网站,在网站的主页上通常会有一个输入框,提示用户输入要访问的网址。

然后,在输入框中输入要访问的被封锁的网址,并点击网站上的 “GO” 按钮或类似的开始按钮来提交请求。

此时,代理网站会接收到用户的请求,并将请求内容封装到 HTTP 包中。随后,代理网站会建立与目标网站的 TCP 连接,并发送封装好的 HTTP 包。

目标网站收到代理网站发送的请求后,解包并处理请求内容。处理完成后,目标网站将请求的资源封装到 HTTP 包中,然后发送回代理网站。

代理网站收到目标网站返回的 HTTP 包,解包并提取出资源。接着,代理网站将请求的资源封装到 HTTP 包中,并将该 HTTP 包发送回给用户的用户代理(如浏览器)。

最后,用户的用户代理收到代理网站返回的 HTTP 包后,解包并显示出请求的网页或资源。

3. 注意事项

使用 Web 在线网页代理服务器时,用户需要注意保护个人信息和隐私。虽然代理服务器可以帮助用户访问被封锁的网页,但它并不能保证网络安全。在使用代理服务器的过程中,用户的请求和响应都要经过代理服务器,这就增加了信息被泄露的风险。因此,用户在使用代理服务器时,应避免在通过代理访问的网页上输入敏感信息,如个人身份证号、银行卡密码等。

(二)Web 请求和响应中的代理方式
1. Web 开发中的请求方法

在 Web 开发中,主要的请求方法有 GET 请求、POST 请求和 HEAD 请求。

GET 请求用于从服务器请求数据,不改变服务器的状态。通常用于获取静态资源、HTML 文件或读取数据,比如从 API 获取列表或单条数据。其特点是请求参数通过 URL 传递,对传递的数据有长度限制,并且是幂等的,无论请求多少次,服务器的状态不会发生变化。同时,GET 请求不应用于提交敏感信息,因为参数信息会显示在地址栏的 URL 中,不安全。

POST 请求用于向服务器发送数据,通常用于提交表单、上传文件、或创建新的资源。发送的数据通常会影响服务器的状态,比如在数据库中创建记录。POST 请求的特点是请求体中包含数据,传递的内容没有长度限制。它不是幂等的,每次请求都会对服务器的状态产生影响。通常用于提交敏感信息,因为数据不会暴露在 URL 中。

HEAD 请求与 GET 请求类似,但是它只返回 HTTP 头部信息,不返回实际的内容主体。HEAD 请求通常用于检查资源是否存在、获取资源的元数据等。

2. 借助代理进行文件下载的示例

以文件下载为例,展示如何使用 NSURLRequest、NSURLConnection 等对象通过代理方式处理服务器响应。首先,需要设置代理服务器的地址和端口信息。然后,创建一个 NSURLRequest 对象,并将其配置为使用代理服务器。接着,使用 NSURLConnection 发送请求,并在连接的委托方法中处理服务器的响应。

以下是一个简单的代码示例:

// 设置代理服务器地址和端口

let proxyHost = "proxy.example.com"

let proxyPort = 8080

// 创建 URL

let url = URL(string: "http://download.example.com/file.zip")!

// 创建请求对象

var request = URLRequest(url: url)

// 设置代理

let proxyURL = URL(string: "http://(proxyHost):(proxyPort)")

let configuration = URLSessionConfiguration.default

configuration.connectionProxyDictionary = [kCFProxyHostNameKey as String: proxyHost, kCFProxyPortNumberKey as String: proxyPort]

let session = URLSession(configuration: configuration)

// 发送请求并处理响应

let task = session.dataTask(with: request) { (data, response, error) in

if let error = error {

print("Error: (error.localizedDescription)")

} else if let data = data {

// 处理下载的文件数据

// 将数据保存到本地文件等操作

}

}

task.resume()

在使用代理进行文件下载时,需要注意以下几点:

首先,确保代理服务器的稳定性和可靠性。如果代理服务器不稳定,可能会导致下载中断或速度缓慢。

其次,注意代理服务器的安全性。一些不可信的代理服务器可能会窃取用户的下载内容或个人信息。

最后,根据实际情况选择合适的代理方式。不同的代理服务器可能支持不同的协议和功能,需要根据具体的需求进行选择。

(三)web 服务器请求代理方式
1. 代理、网关和隧道的概念

代理、网关和隧道在通信中都起着重要的作用,但它们的功能和作用有所不同。

代理作为中间人转发请求和响应。代理服务器位于客户端和服务器之间,接收客户端的请求并转发给服务器,同时接收服务器的响应并返回给客户端。代理服务器可以用于缓存资源、过滤请求、隐藏客户端的真实 IP 地址等。

网关将 HTTP 请求转化为其他协议通信并提高安全性。网关可以将 HTTP 请求转换为其他协议,如 FTP、SMTP 等,以便与不同类型的服务器进行通信。网关还可以提供安全功能,如身份验证、加密等。

隧道用于中转客户端和服务器的通信并确保安全。隧道建立起一条与服务器的通信线路,使用 SSL 加密技术进行通信,确保客户端和服务器端安全通信。隧道通常用于在不安全的网络环境中建立安全的通信通道。

2. 参考文献说明

参考书籍《图解 HTTP》对理解相关内容有很大的帮助。这本书对互联网基盘 ——HTTP 协议进行了全面系统的介绍,包括代理、网关和隧道的概念和作用。通过阅读这本书,读者可以更深入地了解 Web 通信中的各种技术和概念,提高对 Web 开发和网络通信的理解。

二、爬虫的工作原理及案例

(一)网络爬虫概述
1. 定义和作用

网络爬虫是自动抓取互联网信息的程序或脚本。它们被广泛用于搜索引擎、数据挖掘等领域,能够从公开网页抓取数据,为不同领域如金融分析、市场趋势预测等提供数据支持。在一定程度上代替了手工访问网页,实现自动化采集互联网的数据,从而更高效地利用互联网中的有效信息。

2. 历史沿革

网络爬虫技术起源于 1990 年代初的搜索引擎。1990 年,Archie 搜索引擎的出现标志着网络爬虫研究的开始。1993 年麻省理工学院的马修格雷开发了名为 World wide Web Wanderer 的爬虫系统,该系统能够统计互联网中服务器的数量,为后续爬虫系统的开发提供了重要设计思想。

到了 1994 年,出现了机器人、蜘蛛、爬虫等网络自动跟踪索引程序。同年,美国华盛顿大学的师生开发了一种在网络上查询信息的工具,被认为是现代网络爬虫的雏形。它是首个能对 Web 页面进行全文搜索的搜索引擎,使用了广度优先的策略来遍历网页。同年,斯坦福大学的杨致远和大卫费罗共同创办了 Yahoo 公司,其搜索引擎后来成为极具影响力的分类目录式搜索引擎。随后,Lycos、Infoseek、Metacrawler 和 HotBot 等搜索引擎相继推出。

1995 年春,美国数字设备公司的三位科学家开发了 Altavista 搜索引擎,于同年 12 月开始提供信息检索服务,这是首次采用爬虫技术进行网页索引的实例之一。

1997 年,分布式网络爬虫技术的出现进一步推动了搜索引擎技术的发展。同年年底,斯坦福大学的拉里佩奇、谢尔盖布林、斯科特哈桑和阿伦斯特博格共同开发了 Google 搜索引擎,开启了以搜索引擎为主导的互联网新时代。1998 年由谢尔盖布林和拉里佩奇共同开发的 PageRank 算法大大改进了搜索引擎的效果,后来成为了谷歌爬虫的著名算法。

2002 年,开源的网络搜索引擎 Apache Nutch 发布,通过开放源代码的方式推动了网络爬虫技术的发展,促进了学术界和工业界对网络爬虫的研究和应用。

随着技术的发展,网络爬虫经历了从单一处理方式到分布式并行处理的显著演变。起初,爬虫技术仅限于捕获静态网页信息,但后来发展到能够处理动态和实时加载的页面内容。数据爬取的范围和精确性也得到了提升,从一般性的爬取转向更加专注和精准的目标数据爬取。

(二)爬虫工作原理
1. 基本步骤

(1)确定爬取目标:明确需要抓取的网页或数据范围。

(2)发送请求:向目标网页发送 HTTP 请求,获取网页内容。

(3)获取响应:接收服务器返回的响应,包括网页的 HTML 代码等。

(4)解析数据:使用特定的解析工具或库,从网页源代码中提取所需的数据。

(5)存储数据:将提取到的数据保存到本地文件或数据库中,以便后续分析和使用。

2. 实现方式

爬虫可以用多种编程语言实现,其中 Python 是常用的编程语言之一。Python 爬虫常用的库有 requests、BeautifulSoup、Scrapy、Selenium 和 PyQuery 等。

requests 是基于 urllib 编写的阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。

BeautifulSoup 是 HTML 和 XML 的解析库,从网页中提取信息,同时拥有强大的 API 和多样解析方式。

Scrapy 是一个强大的爬虫框架,可以满足简单的页面爬取,也可以用于复杂的爬虫项目。

Selenium 是自动化测试工具,可以模拟用户操作浏览器,适用于处理 JavaScript 渲染的页面。

PyQuery 是 jQuery 的 Python 实现,能够以 jQuery 的语法来操作解析 HTML 文档,易用性和解析速度都很好。

3. 注意事项

(1)合法合规爬取:在爬取数据时,要遵守法律法规和网站的使用条款。不得爬取受版权保护的内容或未经授权的数据。

(2)应对反爬机制:许多网站会采取反爬措施,如验证码、IP 封锁等。爬虫开发者需要不断更新技术,以绕过这些障碍。

(3)注意数据抓取方式:避免对目标网站造成过大的负担,不要在短时间内发送大量请求,以免影响网站的正常运行。

(三)Python 爬虫示例
1. 示例功能介绍

以从豆瓣电影中抓取电影名称和评分为例,该示例的功能是获取豆瓣电影的部分信息,包括电影名称、导演、时间和评分等。通过这个示例,可以了解 Python 爬虫的基本实现过程和方法。

2. 代码解读

以下是从豆瓣电影中抓取电影名称和评分的 Python 代码解读:

import requests

import xlwt

from bs4 import BeautifulSoup

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',

'Host': 'movie.douban.com'

}

movie_list = []

director_list = []

time_list = []

star_list = []

for i in range(0, 10):

link = 'https://movie.douban.com/top250?start=' + str(i * 25)

res = requests.get(link, headers=headers, timeout=10)

soup = BeautifulSoup(res.text, "lxml")

div_list = soup.find_all('div', class_='hd')

div1_list = soup.find_all('div', class_='bd')

div2_list = soup.find_all('div', class_='star')

for each in div_list:

movie = each.a.span.text.strip()

movie_list.append(movie)

for each in div1_list:

info = each.p.text.strip()

if len(info) < 3:

continue

time_start = info.find('20')

if time_start < 0:

time_start = info.find('19')

end = info.find('...')

time = info[end + 32:end + 36]

time_list.append(time)

end = info.find('主')

director = info[4:end - 3]

director_list.append(director)

for each in div2_list:

info = each.text.strip()

star = info[0:3]

star_list.append(star)

file = xlwt.Workbook()

table = file.add_sheet('sheet name')

table.write(0, 0, "排名")

table.write(0, 1, "电影")

table.write(0, 2, "时间")

table.write(0, 3, "导演")

table.write(0, 4, "评分")

for i in range(len(star_list)):

table.write(i + 1, 0, i + 1)

table.write(i + 1, 1, movie_list[i])

table.write(i + 1, 2, time_list[i])

table.write(i + 1, 3, director_list[i])

table.write(i + 1, 4, star_list[i])

file.save('data.xls')

首先,设置请求头headers,包含user-agent和Host信息,模拟浏览器访问。然后,通过循环遍历豆瓣电影 top250 的页面,每次获取 25 部电影的信息。

使用requests.get()方法发送 HTTP 请求,获取网页内容。通过BeautifulSoup解析网页,分别找到电影名称、时间、导演和评分所在的元素。

对于电影名称,从div元素的class="hd"中提取a标签下span标签的文本内容,并去除空格。

对于时间和导演,从div元素的class="bd"中提取p标签的文本内容,通过字符串处理找到时间和导演信息。

对于评分,从div元素的class="star"中提取文本内容的前三个字符作为评分。

最后,将数据保存到 Excel 表格中,使用xlwt库的table.write()方法填写表格内容,并保存文件。

三、Web 爬行器的作用及案例

(一)使用 Python 的 Web 爬行器
1. 功能介绍

Python 开发 Web 爬行器具有诸多优势。首先,Python 语言简洁易读,使得代码易于理解和维护。其次,它拥有强大的库和框架,如 BeautifulSoup、Scrapy 等,为开发人员提供了丰富的工具和功能。Web 爬行器能够自动抓取和提取信息,实现自动化数据采集和处理,大大提高了工作效率。

2. 分类和优势

Web 爬行器主要分为通用爬行器、垂直爬行器和增量爬行器。通用爬行器可以爬取任意网站的数据,具有广泛的适用性。垂直爬行器专注于特定领域或特定类型的网站,如新闻网站、电商网站等,能够更深入地挖掘特定领域的信息。增量爬行器只爬取更新的数据,避免重复爬取已有的数据,节省时间和资源。

Web 爬行器的优势主要体现在以下几个方面:一是自动化数据采集,能够自动访问网页、提取数据,大大提高了数据采集的效率;二是数据多样性,可以采集各种类型的数据,如文本、图片、视频等;三是数据实时性,可以定期或实时地爬取数据,保持数据的最新性;四是可用于数据分析和挖掘,通过爬取大量数据,可以发现隐藏的规律和趋势。

3. 腾讯云相关产品

腾讯云提供了一系列与 Web 爬行器相关的产品。云服务器(CVM)提供弹性计算能力,支持多种操作系统和应用场景,为 Web 爬行器的运行提供稳定的计算资源。云数据库 MySQL 版(CDB)提供高可用、可扩展的 MySQL 数据库服务,可用于存储爬取的数据。云存储(COS)提供安全、稳定、低成本的对象存储服务,适用于图片、视频、文档等数据的存储和管理。人工智能平台(AI Lab)提供丰富的人工智能算法和模型,可对爬取的数据进行分析和处理。物联网(IoT Hub)提供稳定、安全的物联网连接和管理服务,可与 Web 爬行器结合,实现物联网数据的采集和处理。区块链服务(BCS)提供高性能、安全可信的区块链服务,可用于保障爬取数据的真实性和安全性。视频直播(Live)提供高清、低延迟的视频直播服务,与 Web 爬行器结合可实现直播数据的采集和分析。产品介绍链接可参考:云服务器产品介绍链接、云数据库 MySQL 版产品介绍链接、云存储产品介绍链接、人工智能平台产品介绍链接、物联网产品介绍链接、区块链服务产品介绍链接、视频直播产品介绍链接。

(二)大数据分享中的 Web 爬行器
1. 开源 Web 抓取工具的作用

开源 Web 抓取工具在大数据繁荣中发挥着重要作用。它们允许用户根据源代码或框架进行编码,为快速、简单但广泛的抓取方式提供了大量支持。用户可以轻松抓取所需的数据,进行数据分析和处理。2019 年十大开源 Web 抓取工具包括 Scrapy、Heritrix、Web-Harvest、MechanicalSoup、Apify SDK、Apache Nutch、Jaunt、Node-crawler、PySpider 和 StormCrawler。

Scrapy 是 Python 中最流行的开源和协作式 Web 抓取工具,建立在扭曲的异步网络框架之上,能高效提取数据并以多种格式存储。其优势包括快速而强大、易于使用、详细文档丰富、可插入新功能、社区健康资源丰富以及可在云环境下运行。

Heritrix 是基于 JAVA 的开源扩展程序,高度可扩展,设计用于 Web 归档,尊重 robot.txt 排除指令和 Meta 机器人标签,提供基于 Web 的用户界面。其优势有可更换的可插拔模块、基于 Web 的界面、尊重规则和出色的可扩展性。

Web-Harvest 是用 Java 编写的开源刮板,利用 XSLT、XQuery 和正则表达式等技术从指定页面收集数据,可通过自定义 Java 库增强提取功能。其优势为强大的文本和 XML 操作处理器、变量上下文支持以及支持真实脚本语言。

MechanicalSoup 是 Python 库,模拟人在使用浏览器时与网站的交互,围绕 Requests 和 BeautifulSoup 构建,自动存储和发送 cookie,跟随重定向和链接并提交表单。其优势是模拟人类行为、快速抓取简单网站、支持 CSS 和 XPath 选择器。

Apify SDK 是内置 JavaScript 的最佳 Web 抓取工具之一,可扩展的抓取库可使用无头 Chrome 和 Puppeteer 开发数据提取和 Web 自动化作业,具有大规模、高性能刮擦、通过代理池验证云避免被检测以及对 Node.js 插件内置支持等优势。

Apache Nutch 是完全用 Java 编写的开源刮板,具有高度模块化的体系结构,允许开发插件,优势包括高度可扩展和可扩展、遵守 txt 规则、充满活力的社区和积极的发展以及可插拔的解析、协议、存储和索引。

Jaunt 是基于 JAVA 的网络抓取工具,专为网络抓取、网络自动化和 JSON 查询而设计,提供快速、超轻巧、无头的浏览器,优势有处理单个 HTTP 请求 / 响应、轻松与 REST API 接口、支持 HTTP/HTTPS 和基本身份验证以及 DOM 和 JSON 中启用 RegEx 的查询。

Node-crawler 是基于 Node.js 的功能强大的 Web 搜寻器,原生支持非阻塞异步 I/O,支持 DOM 的快速选择,提高搜寻器开发效率。其优势包括速率控制、URL 请求不同优先级、可配置的池大小和重试以及服务器端 DOM 和自动 Cheerio 或 JSDOM 的 jQuery 插入。

PySpider 是 Python 中功能强大的网络爬虫系统,具有易于使用的 Web UI 和分布式体系结构,支持多种数据库进行数据存储。其优势为强大的 WebUI、多种消息队列支持以及分布式架构。

StormCrawler 是成熟的开源 Web 搜寻器,由可重复使用的资源和组件组成,主要用 Java 编写,用于构建低延迟、可扩展和优化的 Web 抓取解决方案。其优势有高度可扩展、易于扩展的附加库以及出色的线程管理。

2. 非编码工具的优势

非编码工具如 Octoparse 使抓取不再是开发人员的特权。对于不熟悉编程的用户来说,这些工具更适合,让抓取变得容易。它们无需用户具备编程知识,通过图形界面和简单的操作即可实现数据抓取。

(三)Web 爬行器在安全测试中的应用
1. 使用 DirBuster 寻找敏感文件和目录

DirBuster 是一款安全工具,可通过暴力或者表单进行来发现 Web 应用服务器上的目录名和文件名。具体实验步骤如下:首先,创建一个包含要查找的文件列表的文本文件,如 dir_dictionary.txt。然后,在 DirBuster 窗口中,将目标 URL 设置为靶机地址,如 http://192.168.123.12/。接着,设置线程数为 20 以获得不错的测试速度。选择基于列表的暴力破解,点击 “浏览”,选择创建的文件。取消选中 “Be Recursive” 选项,其余选项保留默认值。最后,点击 “Start” 开始扫描。如果转到结果选项卡,我们将看到 DirBuster 在字典中找到的文件夹,响应码 200 表示文件或目录存在并且可以被读取。

2. 使用 ZAP 寻找敏感文件和目录

OWASP Zed Attack Proxy(ZAP)是一种非常通用的 web 安全测试工具,具有代理、被动和主动漏洞扫描器、爬行器等特性。配置 ZAP 作为浏览器代理的步骤如下:从 Kali Linux 菜单启动 OWASP ZAP,选择 Applications |03 - Web Application Analysis owasp-zap 或者打开终端并输入 owasp-zap 命令。更改 ZAP 的代理设置,默认端口为 8080,为避免与其他代理冲突,可将端口更改为 8088。在 Firefox 中,转到主菜单并导航到 Preferences | Advanced / Network;在 Connection 中,单击 Settings,选择手动代理配置,并将 HTTP 代理设置为 127.0.0.1,将端口设置为 8088,选中该选项以对所有协议使用相同的代理,然后单击 OK。

使用 ZAP 扫描服务器存在的文件夹的方法:正确配置代理后,浏览到目标网站,如 http://192.168.123.130/WackoPicko/。我们将看到 ZAP 通过显示我们刚访问过的主机的树结构来对此操作做出反应。现在在 ZAP 的左上角面板(“站点” 选项卡)中在目标网站内右键单击,然后在上下文菜单中,导航到 Attack(攻击)强制浏览目录(和子目录),WackoPicko 文件夹。


http://www.niftyadmin.cn/n/5798967.html

相关文章

嵌入式设备常用性能和内存调试指令

文章目录 嵌入式设备常用性能和内存调试指令内存问题分析性能测试android设备通过NDK 使用SimplePerf 抓取火焰图嵌入式linux抓取特定进程的perf火焰图 杂记 嵌入式设备常用性能和内存调试指令 内存问题分析 安装valgrind&#xff0c;按照如下指令执行应用程序&#xff1a; …

设计模式的主要分类是什么?请简要介绍每个分类的特点。

大家好&#xff0c;我是锋哥。今天分享关于【设计模式的主要分类是什么&#xff1f;请简要介绍每个分类的特点。】面试题。希望对大家有帮助&#xff1b; 设计模式的主要分类是什么&#xff1f;请简要介绍每个分类的特点。 1000道 互联网大厂Java工程师 精选面试题-Java资源分…

Excel 列名称转换问题 Swift 解答

文章目录 摘要描述题解答案Swift 实现代码&#xff1a;题解代码分析示例测试及结果 时间复杂度空间复杂度总结未来展望参考资料 摘要 本篇文章将通过 Swift 编程语言解答一个常见的算法问题&#xff1a;给定一个整数 columnNumber&#xff0c;将其转换为 Excel 表中的列名称。…

Flutter/Dart:使用日志模块Logger Easier

Flutter笔记 Flutter/Dart&#xff1a;使用日志模块Logger Easier Logger Easier 是一个为 Dart 和 Flutter 应用程序量身定制的现代化日志管理解决方案。它提供了一个高度灵活、功能丰富的日志记录系统&#xff0c;旨在简化开发者的日志管理工作&#xff0c;同时提供一定的定制…

slam学习笔记7---状态量求导相关数学公式

前言&#xff1a;本来打算只是归纳一下数学求导相关公式&#xff0c;后面也写了旋转求导相关内容&#xff0c;哈哈。感觉有点发散把握不住呀。水平有限&#xff0c;欢迎评论区点出。 一、基本初等函数求导公式 ( C ) ′ 0 , C (C)0,C (C)′0,C为常数 ( x μ ) ′ μ x μ −…

STM32第十一课:STM32-基于标准库的42步进电机的简单IO控制(附电机教程,看到即赚到)

一&#xff1a;步进电机简介 步进电机又称为脉冲电机&#xff0c;简而言之&#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩&#xff0c;步进电机的角位移量与输入的脉冲个数严格成正…

云计算中的容器技术(如Docker)是什么?

今天想和大家聊聊容器技术&#xff0c;特别是Docker这个大家可能经常听到的名词。记得我刚接触容器技术时也觉得挺抽象的&#xff0c;让我用简单的比喻来说明吧。 想象一下你在搬家。传统方式是把所有家具、电器分散装车&#xff0c;到了新家还要重新组装、调试。这就像我们以…

Redis 性能优化的18招

大家好&#xff0c;我是苏三&#xff0c;又跟大家见面了。 前言 Redis在我们的日常开发工作中&#xff0c;使用频率非常高&#xff0c;已经变成了必不可少的技术之一。 Redis的使用场景也很多。 比如&#xff1a;保存用户登录态&#xff0c;做限流&#xff0c;做分布式锁&a…