当前位置: 首页 > article >正文

解锁MCP:AI大模型的万能工具箱

摘要:MCP(Model Context Protocol,模型上下文协议)是由Anthropic开源发布的一项技术,旨在作为AI大模型与外部数据和工具之间沟通的“通用语言”。它通过标准化协议,让大模型能够自动调用外部工具完成任务,提升效率和灵活性。MCP整合了Function call标准,降低了开发成本,适用于复杂任务处理。其应用广泛,包括智能问答、编程辅助和办公自动化等场景,未来有望拓展至更多领域并推动AI生态系统的发展。

一、MCP 是什么

MCP,即 Model Context Protocol,模型上下文协议 ,是由 Claude 的母公司 Anthropic 于 2024 年 11 月开源发布的一项技术。简单来说,MCP 是 AI 大模型的标准化工具箱,也可以把它想象成 AI 大模型和外部数据、工具之间沟通的 “通用语言” 或者 “万能插座”。

在日常工作和学习中,我们经常需要与浏览器、文件、数据库和代码仓库等外部工具进行交互。在传统方式中,我们需要手动截图或复制文本,再将其粘贴到 AI 窗口中进行对话。而 MCP 通过标准化的协议,自动化了这一步骤,让大模型可以利用这些工具与外界互动,获取信息并且完成具体任务。

MCP 服务充当 AI 和外部工具之间的桥梁,能够自动替代人类访问和操作这些外部工具。每个 MCP 服务(也称为 MCP Server)都专注于特定的任务。比如有的负责读写浏览器、有的负责读写本地文件、有的操作 Git 仓库等等 。MCP Server 通常就是运行在本地的一段 Node.js 或者 Python 程序。大模型通过操作系统的标准输入输出(stdio),也就是我们常说的输入与输出通道,来调用某个 MCP Server,它的消息格式是 JSON,这是一种常用的数据交换格式。MCP Server 在接收到请求后,会通过自身的代码功能,或者使用 API 请求,访问外部工具,完成任务。

二、MCP 的技术原理

MCP 技术原理的核心,在于建立大模型与外部工具之间的有效沟通桥梁。当我们向搭载 MCP 技术的大模型提出任务请求时,这个请求就像一颗投入湖面的石子,引发一系列有序的连锁反应。

大模型首先会通过操作系统标准输入通道(stdio)调用 MCP Server。这个过程就好比你在电脑操作系统中,通过特定的指令调用某个应用程序。而大模型使用的 “指令”,是遵循特定 JSON 结构的消息格式 ,这就像是它们之间沟通的 “密码本”,确保信息传递的准确性。

MCP Server 收到请求后,就如同接到任务的 “执行者”,会根据自身的功能,利用代码功能或者向外部工具发送 API 请求,进而访问这些工具来完成任务。比如,若大模型需要获取某个网页的内容,它就会调用负责网页访问的 MCP Server,MCP Server 再通过网页抓取相关的代码或 API,从互联网上获取网页内容,并将结果返回给大模型。

MCP 在技术原理上的一大创新,是整合了 Function call 标准。在 MCP 出现之前,不同大模型的 Function call 标准就像不同国家的语言,各有各的规则,导致大模型与外部工具之间的交互十分不便。而 MCP 就像是一个强大的 “翻译官”,将这些不同的标准整合为一个统一的协议,让几乎所有的大模型都能按照这个标准与外部工具进行交互 。这不仅降低了开发成本,还极大地提高了大模型与外部工具协作的效率和灵活性,使得大模型在处理各种任务时更加得心应手。

三、MCP 的安装与配置

下面,我将以在 AI 编程工具 Cursor 上配置 MCP 为例,为大家进行详细的操作演示。

3.1 升级 Cursor 至最新版本

首先,打开 Cursor,点击界面中的设置按钮 ,进入设置页面。在设置页面中找到 “Beta features” 选项,在这里将 Cursor 升级为最新版本。这一步非常关键,因为新版本通常会修复一些旧版本的问题,并且可能会对 MCP 功能进行优化和完善,确保我们能够顺利地使用 MCP 的各项功能。

3.2 创建配置文件

完成版本升级后,点击 MCP 配置选项。当前 MCP 是通过文件方式进行配置的,所以我们需要在根目录下创建一个名为 “.cursor” 的文件夹,然后在该文件夹内再创建一个后缀名为.json 的文件,用于存放 MCP 的配置信息 。这个.json 文件就像是一个 “指令集”,告诉 Cursor 如何与 MCP Server 进行交互。

3.3 复制代码并完成配置

接下来,打开 GitHub 网站,注册账号后,在搜索栏中输入 “MCP(Model Context Protocol Servers)”,找到对应的页面。以配置 GitHub 为例,点击进入 GitHub 相关页面后,向下滑动页面找到 “NPX” 部分,这里会展示一段代码,这段代码就是我们配置 MCP Server 的关键信息。复制这段代码,并将其粘贴到刚才在 Cursor 中新建的.json 文件中 。粘贴完成后,根据实际需求,可能还需要对代码中的一些参数进行修改,比如一些需要填写个人密钥、token 的地方,要替换成自己的相关信息,以确保 MCP Server 能够正常运行并与 Cursor 进行安全通信。

完成上述步骤后,重启 Cursor。再次打开 Cursor 时,如果看到 MCP 配置相关位置显示绿色指示灯亮起,那就表示 Cursor 已成功识别 MCP Server,MCP 配置成功 。如果指示灯未亮,或者显示异常,那就需要仔细检查之前的操作步骤,比如配置文件中的代码是否复制正确、参数修改是否无误等,也可以查看相关的日志信息来定位问题所在。

四、MCP 的应用案例

4.1 智能问答系统

以某智能客服为例,当用户咨询 “我想了解最近一个月内北京地区销量最高的产品是哪款” 时,智能客服背后的大模型通过 MCP 调用数据库查询工具,直接从企业的销售数据库中获取相关数据,精准地回答用户问题 。而在以往,可能需要人工先从数据库中导出数据,再进行分析,最后才能回复用户,整个过程繁琐且耗时。通过 MCP,智能问答系统的响应速度大幅提升,准确率也得到了保障,为用户提供了更加高效、准确的服务体验 。

4.2 编程辅助

在软件开发过程中,开发人员使用搭载 MCP 技术的编程工具,如前面提到的 Cursor。当需要实现一个复杂的功能,比如在一个电商项目中创建用户订单管理模块时,开发人员只需在 Cursor 中输入自然语言描述,如 “创建一个用户订单管理模块,包含订单的创建、查询、修改和删除功能,数据库使用 MySQL” 。Cursor 利用 MCP 调用相关的代码生成工具、数据库连接工具等,自动生成基础代码框架,并帮助开发人员完成数据库表结构设计、SQL 语句编写等工作,极大地提高了开发效率,减少了开发过程中的错误,让开发人员能够更加专注于业务逻辑的实现 。

4.3 办公自动化

在办公场景中,MCP 同样发挥着重要作用。例如,在处理一份月度销售报告时,员工可以通过自然语言指令,让办公软件利用 MCP 自动从多个数据源,如 Excel 销售数据文件、CRM 系统中的客户数据等,提取相关信息,进行数据整合和分析,最后自动生成报告文档 。以前,员工可能需要花费大量时间手动复制粘贴数据,进行格式调整和数据分析,现在借助 MCP,这些繁琐的操作可以在短时间内自动完成,办公效率得到了显著提升 。

五、MCP 与 Function call 的区别

MCP 和 Function call 虽然都涉及大模型与外部工具的交互,但它们在多个方面存在明显区别 。

从功能角度来看,Function call 本质上是大模型调用外部函数或 API 的一种机制,是大模型自身能力的直接扩展 。比如 GPT-4 可以利用 Function call 直接生成结构化的函数调用请求,查询天气、计算数值等操作 。而 MCP 则更侧重于提供一个标准化的协议,它像是一个 “万能适配器”,解决的是大模型与各种外部工具、数据源之间的兼容性问题,让不同的模型和工具能够高效地互操作 。

在实现方式上,Function call 通常与特定的大模型紧密绑定,依赖于模型厂商的特定实现 。不同的大模型在 Function call 的实现方式和接口上可能各不相同,缺乏统一的标准,这就导致开发者在使用时需要针对不同模型进行大量的适配工作 。而 MCP 则遵循统一的标准协议,如 JSON-RPC 2.0,开发者按照这个标准开发一次接口,就可以被多个大模型调用,大大降低了开发成本和复杂性 。

从应用场景来看,Function call 适用于处理简单、低延迟的任务,比如实时翻译、情感分析、查询实时天气等,能够在模型推理过程中快速调用,高效地完成任务 。而 MCP 更适合复杂、异步的任务,例如企业内部系统的跨平台数据整合,将 CRM、ERP 等系统封装为 MCP Server,供多个 Agent 安全调用,实现复杂的数据交互和业务流程 。

简而言之,MCP 解决的是 “如何让 AI 连接万物” 的通用性问题,而 Function call 解决的是 “如何让 AI 快速执行特定操作” 的效率问题 。二者并不是相互替代的关系,而是互补协作,共同推动 AI 从单纯的对话交互向自动化任务执行迈进,在不同的场景下发挥各自的优势,为 AI 应用的发展提供强大的支持 。

六、MCP 的发展趋势与代码案例

6.1 发展趋势

随着人工智能技术的飞速发展,MCP 作为连接大模型与外部工具的关键技术,其未来发展趋势备受关注 。

在技术层面,MCP 有望实现更加智能化的任务处理。通过不断优化算法和模型,MCP 将能够更精准地理解用户需求,自动调用最合适的外部工具和数据源,实现任务的高效执行 。例如,在智能写作场景中,MCP 不仅能帮助作者查询资料、校对语法,还能根据文章的风格和主题,自动生成相关的案例和引用,提升文章的质量和专业性 。

在应用领域,MCP 将进一步拓展其边界。除了现有的办公、编程、问答等场景,MCP 还将深入到医疗、金融、教育等更多垂直领域 。在医疗领域,医生可以借助 MCP 调用患者的病历数据、医学影像资料以及最新的医学研究成果,为诊断和治疗提供更全面的支持 ;在金融领域,MCP 可以帮助投资者快速分析市场数据、评估投资风险,制定更合理的投资策略 。

从生态建设角度来看,MCP 将促进形成更加开放和繁荣的 AI 生态系统。越来越多的开发者和企业将基于 MCP 开发各种创新应用和服务,不同的大模型、工具和数据源之间将实现更紧密的协作和共享 。这将推动 AI 技术的普及和应用,为各行各业的数字化转型提供强大的动力 。

当然,MCP 的发展也面临一些挑战。例如,如何确保数据的安全和隐私,如何解决不同系统之间的兼容性问题,以及如何应对可能出现的技术垄断等 。但随着技术的不断进步和相关标准的完善,这些问题有望逐步得到解决 。可以预见,MCP 将在未来的 AI 发展中扮演越来越重要的角色,为我们的生活和工作带来更多的便利和创新 。

6.2 经典代码案例及解释

1. 客户端连接到MCP服务器(SSE方式)
async def connect_to_sse_server(self, server_url: str):"""连接到使用SSE传输的MCP服务器"""self._streams_context = sse_client(url=server_url)streams = await self._streams_context.__aenter__()self._session_context = ClientSession(*streams)self.session = await self._session_context.__aenter__()await self.session.initialize()response = await self.session.list_tools()tools = response.toolsprint("\n已连接到服务器,可用工具:", [tool.name for tool in tools])

解释:这段代码展示了客户端如何通过SSE(Server-Sent Events)方式连接到MCP服务器。它首先创建一个SSE客户端上下文,然后进入上下文获取数据流,接着创建客户端会话并初始化。最后,它列出服务器支持的工具,验证连接是否成功。

2. 定义一个MCP工具(天气查询)
@mcp.tool()
async def get_weather(city: str, unit: Literal["celsius", "fahrenheit"] = "celsius") -> str:"""获取城市实时天气信息"""# 模拟天气查询逻辑weather_info = f"{city}: 晴 25°C, 湿度45%, 东南风3级"return weather_info

解释:这是一个简单的MCP工具定义,用于获取指定城市的天气信息。它使用@mcp.tool()装饰器将函数注册为MCP工具,函数参数和返回值类型都明确指定,便于客户端调用时传递参数和处理返回结果。

3. 启动MCP服务器(SSE方式)
if __name__ == "__main__":mcp_server = mcp._mcp_serverstarlette_app = create_starlette_app(mcp_server, debug=True)uvicorn.run(starlette_app, host="0.0.0.0", port=8020)

解释:这段代码展示了如何启动一个基于SSE的MCP服务器。它首先创建一个MCP服务器实例,然后通过create_starlette_app函数将其包装为一个Starlette应用,最后使用uvicorn运行该应用,监听指定的主机和端口。

七、总结与展望

7.1 文章总结

MCP 作为连接大模型与外部工具的创新技术,为人工智能的应用和发展开辟了新的道路。它以其独特的标准化协议,打破了大模型与外部世界之间的壁垒,实现了高效、灵活的数据交互和任务执行,在智能问答、编程辅助、办公自动化等多个领域展现出了巨大的应用价值和潜力 。

随着技术的不断演进,MCP 有望在未来进一步拓展其应用边界,为更多行业带来智能化的解决方案。同时,我们也期待更多的开发者能够关注和探索 MCP 技术,共同推动人工智能生态系统的繁荣发展 。如果你对人工智能技术充满热情,不妨深入了解 MCP,开启你的创新之旅,说不定下一个基于 MCP 的创新应用就将由你创造!

7.2 关键字解释

  1. MCP (Model Context Protocol):模型上下文协议,用于标准化AI大模型与外部工具之间的交互。

  2. Function call:大模型调用外部函数或API的机制,与MCP不同,它通常依赖于特定模型的实现。

  3. SSE (Server-Sent Events):一种服务器推送技术,允许服务器向客户端发送实时消息,常用于MCP的网络传输。

  4. stdio:标准输入输出,用于在同一台服务器上实现MCP客户端与服务器之间的通信。

  5. JSON-RPC 2.0:一种基于JSON的RPC协议,MCP遵循该协议进行数据交换。

  6. Agent:在AI领域,指能够自主执行任务的智能体,MCP常用于连接和管理Agent的工具。

  7. API:应用程序接口,MCP Server通过API与外部工具交互。

  8. Cursor:一个支持MCP的AI编程工具,可用于代码生成和项目管理。

  9. OpenAI:一个知名的人工智能研究实验室,其模型常与MCP结合使用。

  10. Anthropic:MCP的开发者,也是Claude大模型的母公司。

部分图片素材来源:

1、https://zhuanlan.zhihu.com/p/32350404993

2、100 行代码的 MCP 服务,打造一个简易的“智能化运维”平台-腾讯云开发者社区-腾讯云

相关文章素材: 

  1. MCP学习笔记:详细介绍了MCP的概念、发展过程、架构及实际应用案例。

  2. 100 行代码的 MCP 服务,打造一个简易的“智能化运维”平台:通过具体代码示例展示了如何快速搭建一个基于MCP的服务。

 

相关文章:

解锁MCP:AI大模型的万能工具箱

摘要:MCP(Model Context Protocol,模型上下文协议)是由Anthropic开源发布的一项技术,旨在作为AI大模型与外部数据和工具之间沟通的“通用语言”。它通过标准化协议,让大模型能够自动调用外部工具完成任务&a…...

Error in beforeDestroy hook: “Error: [ElementForm]unpected width “

使用 element 的 form 时候报错: vue.runtime.esm.js:3065 Error: [ElementForm]unpected width at VueComponent.getLabelWidthIndex (element-ui.common.js:23268:1) at VueComponent.deregisterLabelWidth (element-ui.common.js:23281:1) at Vue…...

vscode包含工程文件路径

在 VSCode 中配置 includePath 以自动识别并包含上层目录及其所有子文件夹,需结合通配符和相对/绝对路径实现。以下是具体操作步骤及原理说明: 1. 使用通配符 ** 递归包含所有子目录 在 c_cpp_properties.json 的 includePath 中,${workspac…...

私有知识库 Coco AI 实战(七):摄入本地 PDF 文件

是否有些本地文件要检索?没问题。我们先对 PDF 类的文件进行处理,其他的文件往后稍。 Coco Server Token 创建一个 token 备用。 PDF_Reader 直接写个 python 程序解析 PDF 内容,上传到 Coco Server 就行了。还记得以前都是直接写入 Coco …...

GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【二】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

NtfsLookupAttributeByName函数分析之和Scb->AttributeName的关系

第一部分: VOID FindFirstIndexEntry ( IN PIRP_CONTEXT IrpContext, IN PSCB Scb, IN PVOID Value, IN OUT PINDEX_CONTEXT IndexContext ) { 。。。。。。 // // Lookup the attribute record from the Scb. // if (!NtfsLookupAt…...

STM32H7系列USART驱动区别解析 stm32h7xx_hal_usart.c与stm32h7xx_ll_usart.c的区别?

在STM32H7系列中,stm32h7xx_hal_usart.c和stm32h7xx_ll_usart.c是ST提供的两种不同层次的USART驱动程序,主要区别在于设计理念、抽象层次和使用场景: 1. HAL库(Hardware Abstraction Layer) 文件:stm32h7x…...

网络原理 | TCP与UDP协议的区别以及回显服务器的实现

目录 TCP与UDP协议的区别 基于 UDP 协议实现回显服务器 UDP Socket 编程常用 Api UDP 服务器 UDP 客户端 基于 TCP 协议实现回显服务器 TCP Socket 编程常用 Api TCP 服务器 TCP 客户端 TCP 服务端常见的 bug 客户端发送数据后,没有响应 服务器仅支持…...

IP动态伪装开关

IP动态伪装开关 在OpenWrt系统中,IP动态伪装(IP Masquerading)是一种网络地址转换(NAT)技术,用于在私有网络和公共网络之间转换IP地址。它通常用于允许多个设备共享单个公共IP地址访问互联网。以下是关于O…...

【Unity3D】将自动生成的脚本包含到C#工程文件中

我们知道,在用C#开发中,通过vs编辑器新建的脚本,会自动包含到vs工程中,而通过外部创建,比如复制别的工程或代码创建的C#脚本不会包含到vs工程。 在我们的日常开发中,通常会自动创建C#脚本,特别…...

解决leetcode第3509题.最大化交错和为K的子序列乘积

3509.最大化交错和为K的子序列乘积 难度:困难 问题描述: 给你一个整数数组nums和两个整数k与limit,你的任务是找到一个非空的子序列,满足以下条件: 它的交错和等于k。 在乘积不超过limit的前提下,最大…...

【Python 深度学习】1D~3D iou计算

一维iou 二维 import numpy as npdef iou_1d(set_a, set_b):# 获得集合A和B的边界 x1, x2 set_ay1, y2 set_b# 计算交集的上下界low max(x1,y1)high - min(x2, y2)# 计算交集if high - low < 0:inter 0else:inter high - low# 计算并集union (x2 -x1) (y2 - y1) - in…...

java23

1.美化界面 添加背景图片 所以我们添加背景图片要放在后面添加 添加图片边框 绝对路径&#xff1a; 相对(模块)路径&#xff1a; 第一个是绝对路径&#xff0c;第二个是相对路径&#xff0c;但是斜杠的方向不对 总结&#xff1a; 2.图片移动 先实现KeyListener接口&#xf…...

嵌入式工程师常用软件

1、 Git Git 是公司常用的版本管理工具&#xff0c;人人都要会。在线的 git 教程可以参考菜鸟教程&#xff1a; https://www.runoob.com/git/git-tutorial.html 电子书教程请在搜索栏搜索&#xff1a; git Git 教程很多&#xff0c;常用的命令如下&#xff0c;这些命令可…...

LitCTF2025 WEB

星愿信箱 使用的是python&#xff0c;那么大概率是ssti注入 测试{{5*5}} 发现需要包含文字&#xff0c;那么添加文字 可以看到被waf过滤了&#xff0c;直接抓包查看参数上fenjing 可以看到这里是json格式&#xff0c;其实fenjing也是支持json格式的 https://github.com/Marv…...

Redisson WatchDog会一直续期吗?

取决于加锁的方式。 Lock 方法有2种形式&#xff0c;如果指定了leaseTime &#xff08;且不为-1&#xff09;&#xff0c; 不会启用watchDog机制. 如果没有指定leaseTime&#xff0c; 则会启动watchDog机制&#xff0c;且会一直续期&#xff0c;除非线程宕调或者续期失败。 p…...

Linux 下VS Code 的使用

这里以创建helloworld 为例。 Step 0:准备工作&#xff1a; Install Visual Studio Code. Install the C extension for VS Code. You can install the C/C extension by searching for c in the Extensions view (CtrlShiftX). Step 1: 创建工作目录 helloworld&#xff0…...

Android开发namespace奇葩bug

Android开发namespace奇葩bug namespace "com.yibanxxx.yiban"buildFeatures {buildConfig true}namespace 对应你的module的清单下的package...

watchEffect

在处理复杂异步逻辑时&#xff0c;Vue 3 的 watchEffect 相比传统的 watch 具有以下优势&#xff1a; 1. 自动追踪依赖 watchEffect 会自动收集其回调中使用的所有响应式依赖&#xff0c;无需手动指定监听源&#xff1a; import { ref, watchEffect } from vue;const count …...

Qt 布局管理器的层级关系

1、HomeWidget.h头文件&#xff1a; #ifndef HOMEWIDGET_H #define HOMEWIDGET_H#include <QWidget> #include <QPushButton> #include <QVBoxLayout> #include <QHBoxLayout>class HomeWidget : public QWidget {Q_OBJECTpublic:HomeWidget(QWidget …...

Android 之 kotlin 语言学习笔记一

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/learn?hlzh-cn 1、变量声明 Kotlin 使用两个不同的关键字&#xff08;即 val 和 var&#xff09;来声明变量。 val 用于值从不更改的变量。使用 val 声明的变量无法重新赋值。var 用于值可以更改的变量…...

maven模块化开发

使用方法 将项目安装到本地仓库 mvn install 的作用 运行 mvn install 时&#xff0c;Maven 会执行项目的整个构建生命周期&#xff08;包括 compile、test、package 等阶段&#xff09;&#xff0c;最终将构建的 artifact 安装到本地仓库&#xff08;默认路径为 ~/.m2/repos…...

为什么要使用stream流

总的来说就是 它支持链式调用&#xff0c;方便 不会修改原始数据源&#xff0c;而是生成一个新的流或结果 中间操作不会立即执行&#xff0c;只有在终端操作触发时才会真正执行 注意事项 无状态操作&#xff1a;Stream 操作应该是无状态的&#xff0c;不要依赖外部变量的状…...

语义分割的image

假设图像的尺寸为 3x3&#xff0c;并且是 RGB 图像&#xff08;有 3 个通道&#xff09;。每个通道的像素值范围为 [0, 1]&#xff0c;我们将构造一个 batch_size 2 的图像批次。 Image: tensor([[[[0.1347, 0.4583, 0.7102], # 第一张图像的红色通道[0.1774, 0.0328, 0.308…...

云原生安全之网络IP协议:从基础到实践指南

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 IP协议&#xff08;Internet Protocol&#xff09;是互联网通信的核心协议族之一&#xff0c;负责在设备间传递数据包。其核心特性包括&…...

C++——QT 文件操作类

QFile 概述 QFile是Qt框架中用于文件操作的类&#xff08;位于QtCore模块&#xff09;&#xff0c;继承自 QIODevice&#xff0c;提供文件的读写、状态查询和路径管理功能。它与 QTextStream、QDataStream 配合使用&#xff0c;可简化文本和二进制数据的处理&#xff0c;并具备…...

【排错】kylinLinx环境python读json文件报错UTF-8 BOM

kylin Linux环境python读json文件报错UTF-8 BOM 报错描述&#xff1a; windows环境下,python代码读取json文件正常&#xff0c;但是sftp到linux环境下 报错信息&#xff1a; json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column …...

[spring] spring 框架、IOC和AOP思想

目录 传统Javaweb开发的困惑 loC、DI和AOP思想提出 Spring框架的诞生 传统Javaweb开发的困惑 问题一&#xff1a;层与层之间紧密耦合在了一起&#xff0c;接口与具体实现紧密耦合在了一起 解决思路&#xff1a;程序代码中不要手动new对象&#xff0c;第三方根据要求为程序提…...

LInux—shell编程

一、Shell 编程核心特性 解释型语言 无需编译&#xff0c;直接由 bash、sh 等解释器逐行执行。 类似 PHP 的解释执行&#xff0c;不同于 C 的编译型。 系统命令集成 可直接调用 Linux 命令&#xff08;如 ls、grep、awk&#xff09;&#xff0c;实现系统管理自动化。 与 C/…...

尚硅谷redis7 37-39 redis持久化之AOF简介

37 redis持久化之AOF简介 AOF 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工…...