微服务必学!RedisSearch终极使用指南,你值得拥有!

news2024/11/16 0:53:37

🎉🎉欢迎来到我的CSDN主页!🎉🎉
🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚
👉点击这里,就可以查看我的主页啦!👇👇
尘缘的个人主页
🎁如果感觉还不错的话请给我点赞吧!🎁🎁
💖期待你的加入,一起学习,一起进步!💖💖

在这里插入图片描述

目录

  • 引言
  • 1 RedisSearch 安装与设置
    • 1.1 RedisSearch 安装步骤
    • 1.2 如何配置 RedisSearch
  • 2 RedisSearch 核心概念
    • 2.1 数据模型与索引
    • 2.2 文档与文档属性
    • 2.3 索引与搜索
  • 3 RedisSearch 使用方法
    • 3.1 如何创建索引
    • 3.2 如何执行搜索
    • 3.3 高级功能的使用,如多关键字搜索、分页搜索、自定义评分函数等
  • 4 RedisSearch 与微服务的集成
    • 4.1 如何将 RedisSearch 集成到微服务架构中
    • 4.2 RedisSearch 在微服务中的最佳实践
    • 4.3 与其他服务的交互与数据传输
  • 5 RedisSearch 的优势与限制
    • 5.1 RedisSearch 的优势
    • 5.2 RedisSearch 的限制与挑战
  • 6 总结

引言

RedisSearch 是一个基于 Redis 的搜索引擎模块,它提供了全文搜索、索引和聚合功能。通过 RedisSearch,可以为 Redis 中的数据创建索引,执行复杂的搜索查询,并实现高级功能,如自动完成、分面搜索和排序。利用 Redis 的高性能特点,RedisSearch 可以实现高效的搜索和实时分析。对于微服务架构来说,RedisSearch 可以作为搜索服务的一部分,提供快速、高效的搜索能力,对于提高用户体验和性能具有重要的意义。

1 RedisSearch 安装与设置

在开始使用 RedisSearch 之前,需要先进行学习安装和设置。以下是 RedisSearch 安装与设置的步骤:

1.1 RedisSearch 安装步骤

  1. 确保已经安装了 Redis,并且 Redis 的版本是 v6.x 或更高版本。
  2. 打开 Redis 的官方网站,下载 RedisSearch 模块的最新版本。
  3. 将下载的 RedisSearch 模块解压,并将文件夹中的 redi*.**.so 文件复制到 Redis 的 src 目录下。
  4. 在 Redis 的 src 目录下执行以下命令进行编译:
cd src  
make redis-search

编译成功后,会在 src 目录下生成 redis-search.oredis-search.so 文件。

  1. 将生成的文件复制到 Redis 的安装目录中,执行以下命令:
cp redis-search.o /usr/local/redis/bin/  
cp redis-search.so /usr/local/redis/lib/
  1. 现在可以启动 RedisSearch 了。

1.2 如何配置 RedisSearch

RedisSearch 的配置文件是一个 JSON 格式的文件,可以放置在 Redis 的配置目录中。下面是一个简单的配置示例:

{  
  "redis-search": {  
    "module-path": "redis-search.so",  
    "index-pattern": "index*",  
    "index-num-shards": "3",  
    "index-num-replicas": "2",  
    "search-query-template": "{text_field}:{text_field}*{score_field}",  
    "search-query-boost-fields": {  
      "score_field": 2.0,  
      "title_field": 1.5,  
      "description_field": 1.0  
    },  
    "index-client-timeout": "5000",  
    "index-client-max-retries": "3",  
    "index-client-idle-timeout": "30000",  
    "index-client-channel-timeout": "1000",  
    "index-on-demand": false,  
    "index-concurrent-create": false,  
    "datastore": {  
      "module-path": "redis-datastore.so",  
      "nodes": [{"host": "127.0.0.1", "port": "6379"}]  
    }  
  }  
}

在上面的配置中,配置了 RedisSearch 的基本参数,包括模块路径、索引模式、索引数量、搜索查询模板等。此外,还配置了 Redis 数据源的相关参数。下面是一些配置参数的解释:

  • redis-search:RedisSearch 的配置参数。
  • module-path:RedisSearch 模块的文件路径。
  • index-pattern:用于匹配索引的名称前缀。例如,index* 表示匹配以 index 开头的所有索引。
  • index-num-shards:每个索引分片的数量。可以理解为每个索引的分区数。
  • index-num-replicas:每个索引分片的副本数量。可以理解为每个分区的副本数量。
  • search-query-template:搜索查询的模板字符串。在执行搜索查询时,需要按照该模板格式指定查询条件。其中 {text_field} 表示文本字段,{score_field} 表示评分字段。
  • search-query-boost-fields:评分字段的权重设置。例如,如果设置 {score_field:2.0},则表示该字段的得分会乘以 2.0。

2 RedisSearch 核心概念

2.1 数据模型与索引

在RedisSearch中,数据模型指的是用于构建索引的数据结构和格式。RedisSearch支持使用JSON数据类型进行索引,因此可以将数据模型定义为JSON文档的结构和格式。

在创建索引之前,需要定义一个数据模型,指定索引中包含的字段和每个字段的类型。例如,以下是一个简单的数据模型示例:

{  
  "title": "string",  
  "description": "text",  
  "category": "string",  
  "price": "float"  
}

在创建索引时,需要指定一个数据模型,RedisSearch会根据数据模型中定义的字段类型自动创建相应的索引。

2.2 文档与文档属性

文档是指符合数据模型格式要求的JSON文档,每个文档表示一条数据记录。文档中的每个字段对应一个属性,属性定义了该字段的数据类型和索引方式。

例如,以下是一个符合上述数据模型的文档示例:

{  
  "title": "RedisSearch入门指南",  
  "description": "RedisSearch是一个基于Redis的搜索引擎模块,用于全文搜索、索引和聚合数据。",  
  "category": "搜索引擎",  
  "price": 39.99  
}

在文档中,titledescriptioncategoryprice分别对应一个属性,属性的类型分别为stringtextstringfloat

2.3 索引与搜索

索引是用于加速搜索过程的数据结构,通过创建索引,可以快速找到包含特定关键词的文档。

索引是一种倒排表(Inverted Index),它存储了每个字段值与相关文档ID的映射关系。当文档被索引时,RedisSearch会为每个字段创建一个倒排表。

搜索操作是基于索引执行的。当执行搜索查询时,RedisSearch会根据查询语句中的关键词和查询条件生成一个正排表(Forward Index),该表中包含所有符合条件的文档ID。接着,RedisSearch会将正排表和倒排表相结合,计算每个文档的得分并返回搜索结果。

通过将数据模型中的字段类型和索引类型定义清楚,可以创建高效的索引,从而加速搜索过程。

3 RedisSearch 使用方法

3.1 如何创建索引

创建索引需要以下步骤:

  1. 定义数据模型(如3.1节所述)。
  2. 使用Redis命令或Redis客户端库将数据模型中的字段和类型添加到Redis数据库中。
  3. 使用Redis命令或Redis客户端库调用创建索引的函数或命令,例如CREATE INDEX命令或rediSearch_CreateIndex函数。

在创建索引时,需要指定以下参数:

  • 数据模型的名称。
  • 索引类型(可选,默认为default)。
  • 字段名称和类型。

例如,以下是一个使用Redis命令创建索引的示例:

CREATE INDEX index_name ON data_model_name(field_name1, field_name2) TYPE(hash)

这个命令将在名为data_model_name的数据模型上创建一个名为index_name的索引,该索引包含名为field_name1和field_name2的字段,并且这些字段的类型被定义为hash。

还可以使用Redis客户端库(如Redisson)来创建索引,例如:

Config config = new Config();  
config.useSingleServer().setAddress("redis://127.0.0.1:6379");  
RedissonClient redisson = Redisson.create(config);  
  
IndexBuilder indexBuilder = redisson.getBucket("index_name");  
indexBuilder.field("field_name1", DataType.STRING);  
indexBuilder.field("field_name2", DataType.STRING);  
indexBuilder.create();

这个代码段使用Redisson客户端库创建一个名为index_name的索引,并将字段field_name1和field_name2添加到该索引中。

3.2 如何执行搜索

执行搜索需要以下步骤:

  1. 使用Redis命令或Redis客户端库调用搜索命令或函数,例如SEARCH命令或rediSearch_Search函数。
  2. 指定搜索查询的字段和值,以及其他搜索选项(如分页、排序等)。

例如,以下是一个使用Redis命令执行搜索的示例:

SEARCH index_name field_name1:"search_term" field_name2:[min_value TO max_value] SORTBY field_name3 DESC LIMIT 0 10

这个命令将在名为index_name的索引中执行搜索查询,查找包含search_term的field_name1字段或范围在min_value和max_value之间的field_name2字段,并根据field_name3字段进行排序,最后返回前10个结果。

还可以使用Redis客户端库(如Redisson)来执行搜索,例如:

RScoredSearch search = redisson.getScoredSearch("index_name");  
search.query("field_name1", "search_term");  
search.addSorting("field_name3", SortingOrder.DESC);  
search.setLimit(0, 10);  
List<ScoredEntry> result = search.execute();

这个代码段使用Redisson客户端库执行搜索查询,并在结果中添加排序和限制条件,最后返回前10个结果。

3.3 高级功能的使用,如多关键字搜索、分页搜索、自定义评分函数等

  1. 多关键字搜索:

RedisSearch支持多关键字搜索,可以通过指定多个字段和值来实现。例如,以下是一个使用Redis命令执行多关键字搜索的示例:

SEARCH index_name field_name1:"keyword1" field_name2:"keyword2" field_name3:[min_value TO max_value]

这个命令将在名为index_name的索引中执行多关键字搜索,查找包含keyword1的field_name1字段、包含keyword2的field_name2字段以及范围在min_value和max_value之间的field_name3字段。

还可以使用Redis客户端库(如Redisson)来执行多关键字搜索,例如:

RSearch search = redisson.getSearch("index_name");  
search.query()  
  .field("field_name1", "keyword1")  
  .field("field_name2", "keyword2")  
  .range("field_name3", minValue, maxValue)  
  .sort("field_name4", SortingOrder.DESC)  
  .limit(0, 10)  
  .execute();

这个代码段使用Redisson客户端库执行多关键字搜索,并在结果中添加排序和限制条件,最后返回前10个结果。

  1. 分页搜索:

RedisSearch支持分页搜索,可以通过指定偏移量和限制数量来实现。例如,以下是一个使用Redis命令执行分页搜索的示例:

SEARCH index_name SORTBY field_name1 DESC LIMIT offset, count

这个命令将在名为index_name的索引中执行分页搜索,根据field_name1字段进行排序,并从offset偏移量开始返回count个结果。

还可以使用Redis客户端库(如Redisson)来执行分页搜索,例如:

RSearch search = redisson.getSearch("index_name");  
search.setSorting("field_name1", SortingOrder.DESC);  
search.setLimit(offset, count);  
List<Entry> result = search.execute().getEntries();

这个代码段使用Redisson客户端库执行分页搜索,并在结果中添加排序和限制条件,最后返回指定偏移量和限制数量的结果。

  1. 自定义评分函数:

RedisSearch支持自定义评分函数,可以定义自己的评分规则并应用于搜索结果。可以使用addScore()方法将自定义评分函数应用于每个搜索结果。例如,以下是一个使用Redis命令执行自定义评分函数的示例:

php复制代码

SEARCH index_name field_name1:"keyword" SORTBY field_name2 ASC ADDSCORE custom_score(score)

这个命令将在名为index_name的索引中执行搜索查询,查找包含keyword的field_name1字段,并根据field_name2字段进行排序。然后使用ADDSCORE关键字将自定义评分函数custom_score()应用于每个搜索结果,其中score是结果得分。

4 RedisSearch 与微服务的集成

4.1 如何将 RedisSearch 集成到微服务架构中

  1. 确定RedisSearch的部署方式:RedisSearch可以以单节点或集群的方式部署。根据微服务架构的要求,可以选择将RedisSearch部署在每个服务中独立运行,或者将RedisSearch作为共享服务,为多个服务提供搜索功能。
  2. 选择数据模型和索引类型:根据业务需求,选择合适的数据模型和索引类型,以便对数据进行高效的全文搜索、聚合和排序等操作。
  3. 配置RedisSearch服务:为RedisSearch配置相关的参数,例如索引的创建、维护和查询参数等。
  4. 集成RedisSearch客户端库:在每个微服务中集成RedisSearch客户端库,例如Redisson客户端库,以便对RedisSearch服务进行访问和操作。
  5. 设计数据交互接口:为RedisSearch设计数据交互接口,例如RESTful API接口,以便其他微服务能够调用RedisSearch的查询和索引功能。
  6. 实现数据传输:实现数据传输机制,例如使用消息队列、RESTful API或事件通知等方式,将数据从其他微服务传输到RedisSearch中进行索引和查询。

4.2 RedisSearch 在微服务中的最佳实践

  1. 独立部署:将RedisSearch作为独立的服务进行部署,使其与其他微服务相互隔离,以减少故障和运维的影响。
  2. 数据分片:对于大规模数据,可以使用RedisSearch的数据分片功能,将数据分布在多个节点上,以提高搜索性能和容量。
  3. 索引策略:根据业务需求,选择合适的索引策略,例如全文索引、组合索引等,以提高搜索的准确性和效率。
  4. 数据更新策略:对于实时数据更新操作,需要考虑RedisSearch的数据更新策略,以保证搜索结果的准确性和一致性。
  5. 数据保护:使用RedisSearch的数据保护功能,例如主从复制、持久化备份等,以防止数据丢失和故障恢复。
  6. 安全控制:对于敏感数据,要使用RedisSearch的安全控制功能,例如访问控制、加密等措施,以确保数据的安全性和隐私保护。

4.3 与其他服务的交互与数据传输

  1. 异步通信:使用异步通信方式,例如消息队列(如RabbitMQ、Kafka等),将其他服务的数据传输到RedisSearch中进行索引和查询。
  2. 同步通信:使用同步通信方式,例如RESTful API或gRPC等,将其他服务的数据传输到RedisSearch中进行索引和查询。为了保证数据的实时性和一致性,可以使用实时通信协议(如WebSocket、SSE等)进行数据传输。
  3. 数据聚合:在数据传输过程中,可以使用数据聚合的方式将多个微服务的数据整合到一起,以提供更全面的搜索结果。
  4. 服务间调用:在需要调用其他微服务的接口时,可以使用RPC(Remote Procedure Call)方式或者其他服务间调用协议进行调用。例如,使用gRPC、RESTful API或者消息队列等协议进行服务间调用。

5 RedisSearch 的优势与限制

5.1 RedisSearch 的优势

RedisSearch 是一个高性能、低延迟的搜索引擎,它基于 Redis 数据库实现。下面是一些 RedisSearch 的优势:

  1. 高性能:RedisSearch 能够在秒级别内处理数百万条数据的索引和搜索请求,这使得 RedisSearch 适用于大规模数据处理和高并发访问的场景。
  2. 低延迟:RedisSearch 在设计和实现时充分考虑了性能和延迟,通过优化算法和数据结构,实现了低延迟的查询响应。
  3. 灵活的数据模型:RedisSearch 支持灵活的数据模型,可以处理各种类型的数据,包括字符串、数字、日期、数组和嵌套对象等。
  4. 强大的查询能力:RedisSearch 支持丰富的查询语法和操作符,可以实现对数据的复杂分析和挖掘。
  5. 可扩展性:RedisSearch 支持分布式部署,可以通过增加节点数量来提高系统的可扩展性和处理能力。
  6. 与 Redis 集成:RedisSearch 与 Redis 数据库完美集成,可以利用 Redis 的高性能和分布式特性,同时保证数据的实时性和一致性。
  7. 开源社区支持:RedisSearch 是开源项目,得到了社区的广泛关注和支持,可以获得丰富的第三方库和插件。

5.2 RedisSearch 的限制与挑战

虽然 RedisSearch 具有一定的优势,但也存在一些限制和挑战,如下所示:

  1. 数据量限制:RedisSearch 是基于 Redis 数据库实现的,因此其数据量受限于 Redis 的内存容量。在处理大规模数据时,需要考虑到 Redis 的内存限制。
  2. 数据类型限制:RedisSearch 支持的数据类型相对有限,主要支持字符串、数字、日期、数组和嵌套对象等基本类型,对于更复杂的数据类型(如全文文本、图像、视频等)的支持可能不够完善。
  3. 实时性限制:虽然 RedisSearch 支持实时索引和搜索,但对于实时性要求极高的场景(如新闻资讯、金融交易等),可能无法满足需求。
  4. 分布式部署的挑战:虽然 RedisSearch 支持分布式部署,但在实际应用中可能会面临一些挑战,如数据分片、节点间通信、数据一致性等问题。
  5. 与其他系统的集成:RedisSearch 与其他系统的集成可能存在一定的难度和复杂性,需要了解不同系统的接口和数据格式,并进行相应的对接和转换。

6 总结

RedisSearch 是基于 Redis 的搜索引擎模块,提供全文搜索、索引和聚合功能。它适用于微服务架构,可以作为搜索服务的一部分,提供快速、高效的搜索能力。安装和配置 RedisSearch 需要按照一定步骤进行,包括下载、编译和设置配置文件等。RedisSearch 的核心概念包括数据模型与索引、文档与属性、索引与搜索等。创建索引和执行搜索都有相应的步骤和命令,可以使用 Redis 命令或 Redis 客户端库来操作。在微服务中集成 RedisSearch 需要确定部署方式、选择数据模型和索引类型、配置服务和集成客户端库,并设计数据交互接口和传输机制。最后,RedisSearch 具有高性能、低延迟、灵活的数据模型、强大的查询能力、与 Redis 集成以及开源社区支持等优势,但也存在数据量限制、数据类型限制、实时性限制和分布式部署挑战等限制和挑战。

在这里插入图片描述

到这里我的分享就结束了,欢迎到评论区探讨交流!!
💖如果觉得有用的话还请点个赞吧 💖

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ARM Coresight 系列文章 9.1 -- ITM 仪器化跟踪宏单元详细介绍】

文章目录 1.1 ITM 介绍1.1.1 ITM 功能介绍1.1.2 Cortex-M ITM 的地址范围1.2 ITM 使用1.2.1 ITM 寄存器介绍1.2.2 Cortex-M7 ITM 代码示例1.2.3 Cortex-M33 ITM 代码示例1.1 ITM 介绍 在debug 调试阶段通常都是使用 printf(printk) 来进行进行 log 输出,然后定位问题。那么如…

“Python+”集成技术高光谱遥感数据处理与机器学习深度应用丨高光谱数据预处理-机器学习-深度学习-图像分类-参数回归等12个专题

目录 第一章 高光谱数据处理基础 第二章 高光谱开发基础&#xff08;Python&#xff09; 第三章 高光谱机器学习技术&#xff08;python&#xff09; 第四章 典型案例操作实践 更多应用 本教程提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 涵盖高光谱遥感…

C++ Primer (第五版)-第十二章 动态内存

文章目录 序言12.1 动态内存和智能指针shared_ptr类make_shared函数shared_ptr的拷贝和赋值shared_ptr 自动销毁所管理的对象shared_ptr 还会自动释放相关联的内存定义 StrBlob类直接管理内存指针值和delete动态对象的生存期在知道被释放时为止shared_ptr和new结合使用不要混合…

AD7606模块

了解一下ad7606模块,并学习制作一个。 认识AD7606 先了解一下关元AD7606的信息。&#xff08;芯片手册的内容&#xff09; AD7606 采用 5V 单电源供电&#xff0c;不再需要正负 双电源&#xff0c;并支持真正10V 或5V 的双极性信号输。所有的通道均能以高达 200 kSPS 的速率进…

JVM第二讲:JVM 基础 - 字节码详解

JVM 基础 - 字节码详解 本文是JVM第二讲&#xff0c;JVM 基础-字节码详解。源代码通过编译器编译为字节码&#xff0c;再通过类加载子系统进行加载到JVM中运行。 文章目录 JVM 基础 - 字节码详解1、多语言编译为字节码在JVM运行2、Java字节码文件2.1、Class文件的结构属性2.2、…

基于保密信息学科平台系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 教师信息管理 学科动态管理 文献资源管理 征订目录管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步…

注解和依赖注入框架

依赖注入是一种比较流行的设计模式&#xff0c;在 Android 开发中有很多实用的依赖注入框架&#xff0c;可以帮助开发人员少些样板代码&#xff0c;达到各个类之间解耦的目的。 1 注解 从 JDK 5 开始&#xff0c;Java 增加了注解&#xff08;Annotation&#xff09;&#xff…

Maven系列第2篇:安装、配置、mvn运行过程详解

maven系列目标&#xff1a;从入门开始开始掌握一个高级开发所需要的maven技能。 这是maven系列第2篇。 本文主要内容 linux中安装maven window中安装maven mvn命令运行的原理 maven配置设置 本篇环境 jdk1.8 maven3.6.2 我们要写java代码&#xff0c;需要安装jdk&…

Zend Framework 3.1.3 gadget chain

前言 在推特上的PT SWARM账号发布了一条消息。 一个名为Zend Framework的php框架出现了新的gadget chain&#xff0c;可导致RCE。笔者尝试复现&#xff0c;但失败了。所幸&#xff0c;我基于此链&#xff0c;发现在这个框架的最新版本中的另一条链。 复现过程 这里使用vscod…

利达卓越:关注环保事业,持续赋能科技

随着全球环境问题的日益突出,绿色金融作为一种新兴的金融模式逐渐受到各国的重视。绿色金融是指在金融活动中,通过资金、信贷和风险管理等手段,支持环境友好和可持续发展的项目和产业。绿色金融的出现是为了应对气候变化、资源短缺、污染问题等现实挑战,促进经济的绿色转型和可…

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化教程

详情点击公众号链接&#xff1a;【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化教程 第一&#xff1a;基础 1、Earth Engine平台及应用、主要数据资源 2、Earth Engine遥感云重要概念、数据类型与对象等 3、JavaScript与Python遥感云编程比较与选择 4、…

南美哥伦比亚市场最全分析开发攻略,收藏一篇就够了

哥伦比亚作为南美洲最大的经济体之一&#xff0c;其外贸市场潜力巨大&#xff0c;吸引了越来越多的国际企业寻求商机。哥伦比亚跟中国的贸易往来也是非常的密切&#xff0c;今天就来分享一下如何开发南美比较重要的国家哥伦比亚&#xff0c;文章略长&#xff0c;建议大家点赞收…

【RocketMQ】(十一)Dledger模式下的日志复制

RocketMQ在开启Dledger时&#xff0c;使用DLedgerCommitLog&#xff0c;其他情况使用的是CommitLog来管理消息的存储。在Dledger模式下&#xff0c;消息写入时Leader节点还需要将消息转发给Follower节点&#xff0c;有过半的节点响应成功&#xff0c;消息才算写入成功。 Leade…

spring学习小笔记

spring学习小笔记&#xff08;1&#xff09; 一、Spring开发1.1 Spring简介1.2 Spring Framework系统架构1.3 Spring Framework学习路线1.4 Spring Farmework核心概念1.5 Spring入门 二、Bean的基础配置2.1 Bean的别名配置2.2 Bean的作用范围2.3 Bean的实例化2.3.1 构造方法实例…

本地vscode安装GPU版本PyTorch

操作系统 windows, IDE环境vscode&#xff0c;本地GPU 可以新建一个jupyter文件&#xff0c;运行一些测试代码 确保装好显卡驱动 在底下调出终端窗口&#xff0c;默认是power shell&#xff0c;我喜欢用cmd窗口 激活自己的虚拟环境&#xff0c;输入命令 nvidia-smi 确保自己…

ctfshow-web12(glob绕过)

打开链接&#xff0c;在网页源码里找到提示 要求以get请求方式给cmd传入参数 尝试直接调用系统命令&#xff0c;没有回显&#xff0c;可能被过滤了 测试phpinfo&#xff0c;回显成功&#xff0c;确实存在了代码执行 接下来我们尝试读取一下它存在的文件&#xff0c;这里主要介…

E. Li Hua and Array

Problem - E - Codeforces 思路&#xff1a;观察给定的函数&#xff0c;其实就是求与这个数互质的数的个数&#xff0c;即欧拉函数&#xff0c;我们发现一个数迭代欧拉函数不会很多&#xff0c;那么对于第一个操作来说我们可以直接暴力修改&#xff0c;而对于第二个操作来说&am…

软件测试/测试开发丨为什么接口自动化测试是提升职业技能的关键?

接口测试背景和必要性 接口测试是测试系统组件间接口&#xff08;API&#xff09;的一种测试&#xff0c;主要用于检测内部与外部系统、内部子系统之间的交互质量&#xff0c;其测试重点是检查数据交换、传递的准确性&#xff0c;控制和交互管理过程&#xff0c;以及系统间相互…

ElementPlus Switch 开关基础使用

昨天开发用到开关组件 后台返回字段是 can_write 默认是0 or 1 但是Switch 组件绑定的默认值默认是 true or false 直接绑定会导致默认是关闭状态 在页面一加载 值发生变化时 会自己调用 查了文档 需要使用 active-value 和 inactive-value 来指定绑定的数据类型 …

C#,工业化软件与院校软件的对比及编程语言的选择建议

飞机发动之之一&#xff0c;涡轮喷气航空发动机&#xff08;JET ENGINE&#xff09; 火箭发动机之一&#xff0c;俄罗斯RD-180煤油和液氧发动机&#xff08;ROCKET ENGINE&#xff09; 1 飞机发动机与火箭发动机的简明对比 2 工业软件与院校软件的简单对比 除了以上类似的对比…