Elasticsearch 实战应用

Elasticsearch 实战应用

引言

Elasticsearch 是一个分布式、RESTful 风格的搜索和分析引擎,能够快速、实时地处理大规模数据,广泛应用于全文搜索、日志分析、推荐系统等领域。在这篇博客中,我们将从 Elasticsearch 的基本概念入手,结合具体的实战案例,讲解如何在项目中高效使用 Elasticsearch,帮助你掌握其核心功能和应用场景。
在这里插入图片描述

1. Elasticsearch 基本概念

1.1 索引 (Index)

索引是 Elasticsearch 中最重要的概念,它相当于关系型数据库中的表。每个索引都有自己的名称,并包含一组文档和字段。通过创建索引,Elasticsearch 能够存储、查询和分析数据。

1.2 文档 (Document)

文档是 Elasticsearch 中的基本数据单位,类似于关系型数据库中的一行记录。每个文档用 JSON 格式表示,并属于一个特定的索引。

1.3 类型 (Type)

在 Elasticsearch 7.0 版本之后,类型的概念被逐步废弃。现在每个索引只能有一种类型,数据结构通过字段的定义来实现区分。

1.4 映射 (Mapping)

映射定义了文档中的字段及其数据类型,类似于数据库中的表结构定义。通过映射,Elasticsearch 能够有效地存储和索引数据。
在这里插入图片描述

2. Elasticsearch 实战案例

接下来,我们通过具体的代码示例,讲解如何在实际项目中使用 Elasticsearch 进行数据的存储、查询、分析等操作。

2.1 安装与配置

首先,我们需要安装 Elasticsearch。在本地环境中,可以通过以下步骤安装:

  1. 下载 Elasticsearch 安装包:

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-linux-x86_64.tar.gz
    
  2. 解压并进入目录:

    tar -xzf elasticsearch-7.17.0-linux-x86_64.tar.gz
    cd elasticsearch-7.17.0
    
  3. 启动 Elasticsearch:

    ./bin/elasticsearch
    
  4. 检查 Elasticsearch 服务是否启动:
    通过浏览器访问 http://localhost:9200,你应该能看到类似以下的响应:

    {
      "name" : "node-1",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "Zt3PliLvRJOPuo4uE8wDhQ",
      "version" : {
        "number" : "7.17.0",
        "build_flavor" : "default",
        "build_type" : "tar",
        "build_hash" : "aaa",
        "build_date" : "2022-01-19T22:48:51.501073096Z",
        "build_snapshot" : false,
        "lucene_version" : "8.11.1",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    

2.2 创建索引

创建一个存储博客数据的索引,假设每个文档包含 titleauthorcontent 三个字段:

PUT /blogs
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "author": {
        "type": "keyword"
      },
      "content": {
        "type": "text"
      }
    }
  }
}

2.3 插入文档

blogs 索引中插入几篇博客文档:

POST /blogs/_doc/1
{
  "title": "Elasticsearch 实战应用",
  "author": "张三",
  "content": "Elasticsearch 是一个分布式搜索引擎。"
}

POST /blogs/_doc/2
{
  "title": "深入理解 Elasticsearch",
  "author": "李四",
  "content": "本书深入讲解了 Elasticsearch 的内部工作机制。"
}

2.4 查询文档

通过 RESTful API 查询文档。假设我们想查找所有包含关键词 “Elasticsearch” 的博客:

GET /blogs/_search
{
  "query": {
    "match": {
      "content": "Elasticsearch"
    }
  }
}

这个查询会返回所有 content 字段中包含 “Elasticsearch” 的文档,并按相关性得分排序。

2.5 聚合操作

Elasticsearch 还支持对数据进行聚合分析。假设我们想统计每位作者的博客数量,可以使用以下查询:

GET /blogs/_search
{
  "size": 0,
  "aggs": {
    "author_count": {
      "terms": {
        "field": "author"
      }
    }
  }
}

响应结果中会返回每个作者及其对应的博客数量。

2.6 更新文档

我们可以通过 _update API 对文档进行部分更新。例如,我们需要更新文档 1 的 title

POST /blogs/_doc/1/_update
{
  "doc": {
    "title": "Elasticsearch 实战应用(更新版)"
  }
}

2.7 删除文档

如果我们不再需要某篇博客文档,可以通过 _delete API 将其删除。例如,删除文档 2:

DELETE /blogs/_doc/2

在这里插入图片描述

3. 实战场景

3.1 日志分析

Elasticsearch 在日志分析场景中非常常见。我们可以通过 Filebeat 收集系统日志,将其传输到 Elasticsearch 中存储,最后通过 Kibana 进行可视化分析。

3.1.1 Filebeat 配置

假设我们需要将 /var/log/syslog 日志收集到 Elasticsearch,可以使用以下 Filebeat 配置:

filebeat.inputs:
- type: log
  paths:
    - /var/log/syslog

output.elasticsearch:
  hosts: ["localhost:9200"]
  index: "syslog-%{+yyyy.MM.dd}"

启动 Filebeat 后,系统日志会自动被发送到 Elasticsearch 中,并按日期创建索引。

3.1.2 Kibana 可视化

通过 Kibana,我们可以创建各种可视化图表,例如折线图、饼图等,直观地展示日志数据的分布、错误数量、访问情况等信息。

3.2 全文搜索

在电商平台中,商品搜索是一个典型的 Elasticsearch 使用场景。用户输入关键词后,Elasticsearch 会根据商品名称、描述等字段返回匹配的商品,并按相关性排序。通过结合搜索高亮、分词优化等技术,可以极大提升用户的搜索体验。
在这里插入图片描述

4. 性能优化

4.1 分片与副本设置

Elasticsearch 中,索引可以划分为多个分片,每个分片存储部分数据。为了提高查询性能,建议合理配置分片和副本数,避免单个节点成为瓶颈。

4.2 缓存机制

Elasticsearch 内置了多种缓存机制,如查询缓存、字段缓存等。通过合理配置缓存,可以有效提升查询速度。

4.3 集群配置

在大规模数据场景下,Elasticsearch 集群的节点配置尤为重要。建议为主节点、数据节点、协调节点等角色分配合适的硬件资源,保证集群的高效运行。
在这里插入图片描述

5. 性能维护

Elasticsearch 是一个强大、灵活的搜索和分析引擎,适用于多种场景,如全文搜索、日志分析、推荐系统等。通过本文的实战示例,你可以掌握 Elasticsearch 的基础操作和应用场景。在实际项目中,结合集群配置、性能优化等技巧,能够充分发挥 Elasticsearch 的潜力。

5.1 日常维护和管理

在实际应用中,Elasticsearch 的运行状态与数据一致性非常重要。因此,了解日常的维护操作以及如何监控集群健康至关重要。下面介绍一些常见的维护任务。

5.1.1 集群健康监控

Elasticsearch 提供了一个简单的 API 来检查集群的健康状态:

GET /_cluster/health

响应结果将显示集群的健康状态,分为 green(正常)、yellow(部分副本未分配)、red(索引不可用)。如果集群状态为 yellowred,需要立即排查问题,以防数据丢失或查询失败。

5.1.2 索引优化

随着数据的增加,索引的存储和查询性能可能会下降。可以通过以下几种方法优化索引性能:

  • 合并段(Merge Segments): Elasticsearch 将数据分成多个段存储,定期进行段合并可以减少小文件的数量,从而提高查询速度。合并段的操作可以通过手动触发:

    POST /my-index/_forcemerge?max_num_segments=1
    
  • 关闭未使用的索引: 如果某些索引只用于存档,可以将它们关闭,以节省资源。关闭索引后,它将不可写入或查询,只有重新打开后才可以操作:

    POST /my-index/_close
    
5.1.3 索引迁移与备份

为了确保数据的安全性,定期备份是必须的。Elasticsearch 支持快照与恢复机制,将索引备份到外部存储系统中(如 AWS S3)。以下是如何创建一个快照仓库和备份数据的步骤:

  1. 创建快照仓库:

    PUT /_snapshot/my_backup
    {
      "type": "fs",
      "settings": {
        "location": "/mount/backups"
      }
    }
    
  2. 创建快照:

    PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
    
  3. 恢复快照:

    POST /_snapshot/my_backup/snapshot_1/_restore
    
5.1.4 删除旧数据

对于某些应用场景(如日志分析),可能只需要保留最近一段时间的数据。通过设置索引生命周期管理(ILM),可以自动删除或归档旧数据:

PUT /_ilm/policy/delete-after-30-days
{
  "policy": {
    "phases": {
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

将此策略应用到特定索引:

PUT /my-index/_settings
{
  "index.lifecycle.name": "delete-after-30-days"
}

5.2 实际问题的解决方案

5.2.1 处理大数据量查询时的性能问题

当数据量巨大时,单次查询的大量数据会造成内存开销过高。可以通过以下方式解决该问题:

  • 分页查询: 对于需要获取大量数据的查询,使用分页(fromsize)控制每次返回的数据量:

    GET /my-index/_search
    {
      "from": 0,
      "size": 100,
      "query": {
        "match_all": {}
      }
    }
    
  • Scroll API: 当数据量太大且无法通过分页完成时,可以使用 Scroll API 执行大规模的查询,Elasticsearch 将保持游标以便多次查询结果:

    GET /my-index/_search?scroll=1m
    {
      "size": 1000,
      "query": {
        "match_all": {}
      }
    }
    
5.2.2 处理索引中字段类型不匹配

有时候,由于数据不一致或缺乏严格的映射定义,Elasticsearch 可能会遇到字段类型不匹配的问题。例如,同一字段在不同文档中被解析为不同类型(如文本和数字),这会导致查询错误。

  • 明确字段类型: 最好在索引创建时提前定义好每个字段的类型,以避免自动推断带来的问题:

    PUT /my-index
    {
      "mappings": {
        "properties": {
          "age": { "type": "integer" }
        }
      }
    }
    
  • 动态映射: 如果索引已经存在并出现了类型冲突,可以通过动态映射来指定如何处理新字段的类型:

    PUT /my-index/_mapping
    {
      "dynamic": "strict",
      "properties": {
        "new_field": {
          "type": "text"
        }
      }
    }
    

5.3 Elasticsearch 的安全性

5.3.1 用户和角色管理

Elasticsearch 支持基于角色的访问控制(RBAC)。通过 Kibana 或者 API,可以创建用户并为其分配不同的权限。

例如,创建一个仅能读写某个索引的用户:

  1. 创建角色:

    POST /_security/role/blog_writer
    {
      "indices": [
        {
          "names": [ "blogs" ],
          "privileges": [ "read", "write" ]
        }
      ]
    }
    
  2. 创建用户并关联角色:

    POST /_security/user/johndoe
    {
      "password": "password123",
      "roles": [ "blog_writer" ]
    }
    
5.3.2 数据加密

Elasticsearch 提供了传输和存储加密的选项。可以启用 TLS 加密来确保数据在集群节点之间的传输安全。具体配置方法可以参考官方文档中的加密传输指南。

6. 总结

通过本文,你已经了解了 Elasticsearch 的基本概念、核心操作以及实际应用场景中的常见问题和解决方案。Elasticsearch 的强大之处不仅体现在它的搜索能力,还包括它在大数据分析、日志处理和实时搜索场景中的应用。随着数据量的爆炸性增长,掌握 Elasticsearch 将为你在数据处理和搜索领域提供重要的优势。
继续之前的内容,进一步详细讲解 Elasticsearch 的高级功能和最佳实践。
在这里插入图片描述

7. Elasticsearch 高级功能

Elasticsearch 不仅具备基本的搜索和分析功能,还提供了许多高级特性,帮助开发者更好地满足复杂的业务需求。

7.1 多语言全文检索

在全球化的应用场景中,处理多语言文本是一个常见的挑战。Elasticsearch 提供了丰富的分析器(Analyzer),支持对不同语言进行分词和索引。

例如,要创建支持中文分词的索引,可以使用 ik_max_word 分词器(需要安装 IK 分词器插件):

PUT /my_chinese_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_analyzer"
      }
    }
  }
}

插入一条中文文档:

POST /my_chinese_index/_doc
{
  "content": "Elasticsearch 是一个强大的搜索引擎"
}

进行搜索:

GET /my_chinese_index/_search
{
  "query": {
    "match": {
      "content": "搜索引擎"
    }
  }
}
7.2 搜索建议(Autocomplete)

为了提升用户体验,许多应用都会在用户输入时提供实时的搜索建议。Elasticsearch 的 Completion Suggesters 可以高效地实现这一功能。

创建索引并设置 completion 字段类型:

PUT /music
{
  "mappings": {
    "properties": {
      "song": {
        "type": "text"
      },
      "suggest": {
        "type": "completion"
      }
    }
  }
}

插入文档:

POST /music/_doc
{
  "song": "Shape of You",
  "suggest": {
    "input": ["Shape of You", "Ed Sheeran"]
  }
}

执行搜索建议查询:

POST /music/_search
{
  "suggest": {
    "song-suggest": {
      "prefix": "Sh",
      "completion": {
        "field": "suggest"
      }
    }
  }
}
7.3 地理位置查询

对于需要处理地理位置信息的应用,Elasticsearch 提供了 geo_pointgeo_shape 类型,支持地理位置的存储和查询。

创建包含地理位置的索引:

PUT /places
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "location": { "type": "geo_point" }
    }
  }
}

插入文档:

POST /places/_doc
{
  "name": "Eiffel Tower",
  "location": {
    "lat": 48.8584,
    "lon": 2.2945
  }
}

执行地理位置查询,查找在特定范围内的地点:

GET /places/_search
{
  "query": {
    "geo_distance": {
      "distance": "5km",
      "location": {
        "lat": 48.8566,
        "lon": 2.3522
      }
    }
  }
}
7.4 跨集群搜索(Cross-Cluster Search)

在大型系统中,数据可能分布在多个 Elasticsearch 集群中。通过跨集群搜索功能,可以在一个集群上查询其他集群的数据。

配置远程集群连接:

PUT /_cluster/settings
{
  "persistent": {
    "search.remote.remote_cluster.seeds": [
      "remote_host:9300"
    ]
  }
}

在查询时,使用远程集群的别名:

GET /remote_cluster:blogs/_search
{
  "query": {
    "match_all": {}
  }
}

在这里插入图片描述

8. 实战经验分享

8.1 索引模板的使用

在处理大量相似结构的索引(如按日期创建的日志索引)时,可以使用索引模板(Index Templates)来自动应用设置和映射。

创建索引模板:

PUT /_template/logs_template
{
  "index_patterns": ["logs-*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "timestamp": { "type": "date" },
      "level": { "type": "keyword" },
      "message": { "type": "text" }
    }
  }
}

当创建名称匹配 logs-* 的索引时,将自动应用此模板。

8.2 合理使用别名(Alias)

别名可以为一个或多个索引创建一个替代名称,方便应用程序的索引管理和切换。

创建别名:

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "logs-2023-10",
        "alias": "current-logs"
      }
    }
  ]
}

当需要切换到新的索引时,只需更新别名指向:

POST /_aliases
{
  "actions": [
    { "remove": { "index": "logs-2023-10", "alias": "current-logs" }},
    { "add": { "index": "logs-2023-11", "alias": "current-logs" }}
  ]
}
8.3 避免深度分页

Elasticsearch 对深度分页的性能不佳,因为需要跳过大量文档。可以使用 search_after 或者 Scroll API 来处理大量数据的分页。

使用 search_after

GET /my-index/_search
{
  "size": 10,
  "query": { "match_all": {} },
  "sort": [ { "timestamp": "asc" }, { "_id": "asc" } ],
  "search_after": [ 1609459200000, "some_id" ]
}

在这里插入图片描述

9. 学习资源

为了更深入地了解 Elasticsearch,以下是一些推荐的学习资源:

  • 官方文档:Elasticsearch 官方文档详尽且更新及时,是最权威的参考资料。Elasticsearch Documentation

  • Elasticsearch 权威指南:一本免费电子书,涵盖了 Elasticsearch 的核心概念和实践。Elasticsearch: The Definitive Guide

  • 社区论坛:参与 Elasticsearch 的社区讨论,可以获取实践经验和解决方案。Elastic Discuss
    在这里插入图片描述

10. 结语

Elasticsearch 作为一个强大的搜索和分析引擎,凭借其分布式、高可用和高扩展性的特性,已经成为众多企业的首选解决方案。通过本文的详细讲解和实战案例,相信你已经对 Elasticsearch 的应用有了深入的了解。

在未来的项目中,建议你:

  • 持续学习:Elasticsearch 的生态系统不断发展,保持对新特性的关注。

  • 动手实践:通过实际项目或练习,巩固所学知识。

  • 优化性能:根据具体业务需求,合理配置集群和索引,提升系统性能。

希望这篇博客能够对你的 Elasticsearch 之旅有所帮助,祝你在技术的道路上不断进步!


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/887522.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无神论文解读之ControlNet:Adding Conditional Control to Text-to-Image Diffusion Models

一、什么是ControlNet ControlNet是一种能够控制模型生成内容的方法,能够对文生图等模型添加限制信息(边缘、深度图、法向量图、姿势点图等),在当今生成比较火的时代很流行。 这种方法使得能够直接提供空间信息控制图片以更细粒…

Hive数仓操作(十七)

一、Hive的存储 一、Hive 四种存储格式 在 Hive 中,支持四种主要的数据存储格式,每种格式有其特点和适用场景,不过一般只会使用Text 和 ORC : 1. Text 说明:Hive 的默认存储格式。存储方式:行存储。优点…

设计模式、系统设计 record part03

创建者模式 1.创建、使用,二者分离 2.降低,耦合度 3.使用者,不用关注,对象的创建细节 工厂模式: 1.对象由工厂生产, 2.使用者与工厂交流,不与对象直接打交道, 3.在工厂里直接更换对象…

快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例

本文作者:胡玉龙,快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年,快手的数据量已突破800TB大关,其中最大集群的数据量更是达到了数百TB级别。为此,快手将数据…

静止坐标系和旋转坐标系变换的线性化,锁相环线性化通用推导

将笛卡尔坐标系的电压 [ U x , U y ] [U_x, U_y] [Ux​,Uy​] 通过旋转变换(由锁相环角度 θ P L L \theta_{PLL} θPLL​ 控制)转换为 dq 坐标系下的电压 [ U d , U q ] [U_d, U_q] [Ud​,Uq​]。这个公式是非线性的,因为它涉及到正弦和余弦函数。 图片中的推导过程主要…

[C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过

官方框架: https://github.com/ultralytics/ultralytics yolov8官方最近推出yolov11框架,标志着目标检测又多了一个检测利器,于是尝试在windows下部署yolov11的tensorrt模型,并最终成功。 重要说明:安装环境视为最基…

总结TypeScript相关知识

目录 引入认识特点安装使用变量声明类型推导 JS 和 TS 共有类型number类型boolean类型string类型Array类型null和undefined类型object类型symbol类型对象类型函数类型 可选和只读type 和 interface索引签名类型断言非空类型断言类型缩小严格赋值检测现象TS 新增类型字面量类型a…

Golang | Leetcode Golang题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; func findMinArrowShots(points [][]int) int {if len(points) 0 {return 0}sort.Slice(points, func(i, j int) bool { return points[i][1] < points[j][1] })maxRight : points[0][1]ans : 1for _, p : range points {if p[0] > …

windows下安装rabbitMQ并开通管理界面和允许远程访问

如题&#xff0c;在windows下安装一个rabbitMQ server&#xff1b;然后用浏览器访问其管理界面&#xff1b;由于rabbitMQ的默认账号guest默认只能本机访问&#xff0c;因此需要设置允许其他机器远程访问。这跟mysql的思路很像&#xff0c;默认只能本地访问&#xff0c;要远程访…

Jenkins pipeline配置示例

前提条件&#xff1a;已经安装Jenkins并能正常启动 如果Jenkins安装启动遇到问题可以参考&#xff1a; 1.创建pipeline 点击新建项目&#xff1a; 输入名称&#xff0c;选择pipeline&#xff1a; 进入配置页面&#xff0c;如果要配置GitHub Webhook要勾选&#xff1a;<fo…

机器人的性能指标

1. 负荷能力 负荷能力负荷能力是指机器人在满足其他性能要求的情况下,能够承载的负荷重量。例如,一台机器人的最大负荷能力可能远大于它的额定负荷能力,但是达到最大负荷时,机器人的工作精度可能会降低,可能无法准确地沿着预定的轨迹运动,或者产生额外的偏差。机器人的负荷量与…

交换排序:冒泡排序、递归实现快速排序

目录 冒泡排序 1.冒泡排序的核心思想 2.冒泡排序的思路步骤 3.冒泡排序代码 4.代码分析 5.对冒泡排序的时间复杂度是O(N^2)进行解析 6.冒泡排序的特性总结 递归实现快速排序(二路划分版本) 1.快速排序基本思路 2.代码思路步骤 3.代码实现 4.代码分析 (1)递归终止条…

lrzsz串口文件传输

此时如果需要传输文件&#xff0c;需要借助rz/sz工具&#xff0c;可以使用的传输协议有ZMODEM、YMODEM、XMODEM&#xff0c;默认是ZMODEM。 https://en.wikipedia.org/wiki/ZMODEM https://gallium.inria.fr/~doligez/zmodem/zmodem.txt 这里记录item2下使用rz/sz进行文件传输…

MSF捆绑文件

msf捆绑文件 msf快速打开不启动banner msfconsole -q msf捆绑文件 msfvenom -p windows/meterpreter/reverse_tcp LHOST127.0.0.1 LPORT8888 -f exe -x 1.exe -o msf.exe

Java 网络编程基础

网络通信三要素 此笔记来之与黑马.B站的视频是真的高 基本的通信架构 基本的通信架构有2种形式&#xff1a;CS架构&#xff08;Client 客户端/ Server 服务端&#xff09;、BS架构( Browser 浏览器/ Server 服务端)。 IP 地址 IP&#xff08;InternetProtocol&#xff09;&a…

Java中的break、continue和return语句

break、continue和return break语句引入基本介绍基本语法示意图注意事项练习String字符串的比较 continue跳转控制语句基本介绍基本语法示意图 return跳转控制语句 break语句 引入 随机生成1-100的一个数&#xff0c;直到生成了97这个数&#xff0c;看看你一共用了几次&#…

Electron 使⽤ electron-builder 打包应用

electron有几种打包方式&#xff0c;我使用的是electron-builder。虽然下载依赖的时候让我暴躁&#xff0c;使用起来也很繁琐&#xff0c;但是它能进行很多自定义&#xff0c;打包完成后的体积也要小一些。 安装electron-builder&#xff1a; npm install electron-builder -…

教育领域的技术突破:SpringBoot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

传感器模块编程实践(二)W5500 SPI转以太网模块简介及驱动源码

文章目录 一.概要二.W5500芯片介绍W5500通讯协议介绍 三.W5500模块介绍四.W5500模块原理图五.W5500以太网模通讯实验六.CubeMX工程源代码下载七.小结 一.概要 我们介绍过单片机的以太网系统一般是由&#xff1a;单片机MACPHYRJ45。有些单片机比如STM32F407VET6芯片内部自带MAC…

Vue基础(2)检测数据原理~生命周期

文章目录 检测数据原理1.更新时遇到的问题2.检测数据的原理-对象3. vue.set()的使用 收集表单数据过滤器内置指令1.v-text2.v-html3.v-cloak4.v-once5.v-pre 自定义指令生命周期1.挂载流程2.更新流程3.销毁流程 检测数据原理 1.Vue会监视data中的所有层次的数据 2.如何监测对象…