《Linux运维总结:使用旧版redis-shake2.x进行redis集群间的数据同步【方案二】》

news2024/9/26 5:17:10

一、redis-shake简介

redis-shake是阿里云开源的用于Redis数据迁移和过滤的工具。

Github参考:redis-shake简介


1.1、迁移工具对比

redis-migrate-tool
redis-migrate-tool是唯品会开源的一款Redis异构集群之间的数据实时迁移工具,不过已经有两年没有更新了,我个人觉得这是一款比较完善的工具,特别是数据校验。

redis-shake
RedisShake是阿里云基于豌豆荚开源的redis-port进行二次开发的一个支持Redis异构集群实时同步的工具,它和redis-migrate-tool相比较,我觉得它的优点在于支持前缀key的同步,支持多DB同步,而redis-migrate-tool 只能全量同步,并且如果源做了分库,同步到目标Redis的时候都同步到了db0一个库里面了,这对于做了分库场景的业务是不可行的。

redis-port
redis-port是豌豆荚当年为了让大家方便从redis迁移到Codis开源的一个Redis数据迁移工具,现在也已经很久没更新了。


1.2、redis-shake版本对比

迁移工具版本类型版本说明支持redis版本支持模式
redis-shakeredis-shake 3.x新版Redis 5.0, Redis 6.0 and Redis 7.0Supports Standalone, Cluster and some proxies type like Codis, twemproxy, Aliyun Cluster Proxy, Tencent Cloud Proxy
redis-shakeredis-shake 2.x旧版Redis version from 2.x to 6.xstandalone sentinel cluster proxy

二、单机redis数据迁移

《Linux运维总结:Centos7.6源码安装单实例redis6.2.8》

2.1、环境信息如下

迁移环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.191Centos7.66.2.8x86_647000源主机
192.168.1.192Centos7.66.2.8x86_647000目标主机

2.2、安装redis-shake

1、源端创建测试数据

[root@localhost ~]# for line in {1..10000};do /opt/redis6/bin/redis-cli -h 192.168.1.191 -p 7000 -c -a 1UEJjjGfYZU7dCWy set ops_${line} ${line}; done

2、下载解压redis-shake文件

[root@localhost ~]# mkdir redis-shake && cd redis-shake
[root@localhost redis-shake]# wget https://github.com/alibaba/RedisShake/releases/download/release-v2.1.2-20220329/release-v2.1.2-20220329.tar.gz
[root@localhost redis-shake]# tar axf release-v2.1.2-20220329.tar.gz

3、修改配置文件

[root@localhost redis-shake]# vim bin/redis-shake.conf 
source.type = standalone
source.address = 192.168.1.191:7000
source.password_raw = 1UEJjjGfYZU7dCWy
target.type = standalone
target.address = 192.168.1.192:7000
target.password_raw = 1UEJjjGfYZU7dCWy

2.3、redis-shake执行数据迁移

执行下述命令启动redis-shake,redis-shake将开始执行数据迁移

说明:支持sync, restore, dump, decode, rump等模式,全量+增量同步请选择sync,mac下请使用redis-shake.darwin,windows请用redis-shake.windows。

[root@localhost bin]# ./redis-shake.linux -conf=redis-shake.conf -type=sync

出现百分比,则为全量同步阶段,增量同步,出现字样sync rdb done后,当前dbSyncer进入增量同步

2023/01/04 17:08:38 [INFO] DbSyncer[0] total = 125.93KB -     125.93KB [100%]  entry=10000  (全量同步阶段)     
2023/01/04 17:08:38 [INFO] DbSyncer[0] sync rdb done (进入增量同步阶段)
2023/01/04 17:08:38 [INFO] DbSyncer[0] FlushEvent:IncrSyncStart	Id:redis-shake	
2023/01/04 17:08:39 [INFO] DbSyncer[0] sync:  +forwardCommands=1      +filterCommands=0      +writeBytes=4
2023/01/04 17:08:40 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2023/01/04 17:08:41 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0

2.4、校验迁移后的数据

参考官网:校验迁移后的数据

说明:redis-full-check is used to compare whether two redis have the same data. redis-full-check用于比较2个redis数据是否一致,支持单节点、主从、集群版、以及多种proxy,支持同构以及异构对比,redis的版本支持2.x-5.x。当前redis版本为6.x,也是可以使用,因为测试的不是很全面,也有可能会在某些场景下存在问题。

[root@localhost ~]# wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz
[root@localhost ~]# tar axf redis-full-check-1.4.8.tar.gz && cd redis-full-check-1.4.8
[root@localhost redis-full-check-1.4.8]# ./redis-full-check -s "192.168.1.191:7000" -p 1UEJjjGfYZU7dCWy -t 192.168.1.192:7000-a 1UEJjjGfYZU7dCWy --sourcedbtype=0 --targetdbtype=0

说明:执行完成后命令行输出校对结,如果此处为0,则两端数据一致

在这里插入图片描述


三、redis哨兵集群数据迁移

《Linux运维总结:Centos7.6部署redis6.2.8哨兵集群》

3.1、环境信息如下

源端环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.191Centos7.66.2.8x86_647001master
192.168.1.191Centos7.66.2.8x86_647002slave
192.168.1.191Centos7.66.2.8x86_647003slave
192.168.1.191Centos7.66.2.8x86_647004sentinel
192.168.1.191Centos7.66.2.8x86_647005sentinel
192.168.1.191Centos7.66.2.8x86_647006sentinel

目标端环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.192Centos7.66.2.8x86_647001master
192.168.1.192Centos7.66.2.8x86_647002slave
192.168.1.192Centos7.66.2.8x86_647003slave
192.168.1.192Centos7.66.2.8x86_647004sentinel
192.168.1.192Centos7.66.2.8x86_647005sentinel
192.168.1.192Centos7.66.2.8x86_647006sentinel

3.2、安装redis-shake

1、源端创建测试数据

[root@localhost ~]# for line in {1..10000};do /data/pkgs/redis/master/bin/redis-cli -h 192.168.1.191 -p 7001 -c -a 1UEJjjGfYZU7dCWy set ops_${line} ${line}; done

2、下载解压redis-shake文件

[root@localhost ~]# mkdir redis-shake && cd redis-shake
[root@localhost redis-shake]# wget https://github.com/alibaba/RedisShake/releases/download/release-v2.1.2-20220329/release-v2.1.2-20220329.tar.gz
[root@localhost redis-shake]# tar axf release-v2.1.2-20220329.tar.gz

3、修改配置文件

说明:源redis的地址,需要填写sentinel_master_name:master_or_slave@sentinel_cluster_address。其中master_or_slave表示从sentinel中选择的db是master还是slave,如果配置为master,redis集群架构为一主多从(星形)结构,为了降低主节点网络带宽消耗,以及对主节点的负载,保证服务的稳定性,我们需要将其配置为slave。

[root@localhost redis-shake]# vim bin/redis-shake.conf 
source.type = sentinel
source.address = mymaster:slave@192.168.1.191:7004;192.168.1.191:7005;192.168.1.191:7006
source.password_raw = 1UEJjjGfYZU7dCWy
target.type = sentinel
target.address = mymaster:master@192.168.1.192:7004;192.168.1.192:7005;192.168.1.192:7006
target.password_raw = 1UEJjjGfYZU7dCWy

3.3、redis-shake执行数据迁移

执行下述命令启动redis-shake,redis-shake将开始执行数据迁移

说明:支持sync, restore, dump, decode, rump等模式,全量+增量同步请选择sync,mac下请使用redis-shake.darwin,windows请用redis-shake.windows。

[root@localhost bin]# ./redis-shake.linux -conf=redis-shake.conf -type=sync

出现百分比,则为全量同步阶段,增量同步,出现字样sync rdb done后,当前dbSyncer进入增量同步

2023/01/04 17:08:38 [INFO] DbSyncer[0] total = 125.93KB -     125.93KB [100%]  entry=10000  (全量同步阶段)     
2023/01/04 17:08:38 [INFO] DbSyncer[0] sync rdb done (进入增量同步阶段)
2023/01/04 17:08:38 [INFO] DbSyncer[0] FlushEvent:IncrSyncStart	Id:redis-shake	
2023/01/04 17:08:39 [INFO] DbSyncer[0] sync:  +forwardCommands=1      +filterCommands=0      +writeBytes=4
2023/01/04 17:08:40 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2023/01/04 17:08:41 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0

3.4、校验迁移后的数据

参考官网:校验迁移后的数据

说明:redis-full-check is used to compare whether two redis have the same data. redis-full-check用于比较2个redis数据是否一致,支持单节点、主从、集群版、以及多种proxy,支持同构以及异构对比,redis的版本支持2.x-5.x。当前redis版本为6.x,也是可以使用,因为测试的不是很全面,也有可能会在某些场景下存在问题。

[root@localhost ~]# wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz
[root@localhost ~]# tar axf redis-full-check-1.4.8.tar.gz && cd redis-full-check-1.4.8
[root@localhost redis-full-check-1.4.8]# ./redis-full-check -s "192.168.1.191:7001" -p 1UEJjjGfYZU7dCWy -t "192.168.1.192:7001" -a 1UEJjjGfYZU7dCWy --sourcedbtype=0 --targetdbtype=0

说明:redis-full-check参数如下所示:

在这里插入图片描述

说明:执行完成后命令行输出校对结,如果此处为0,则两端数据一致

在这里插入图片描述


四、redis cluster集群数据迁移

《Linux运维总结:Centos7.6部署redis6.2.8 cluster集群》

4.1、环境信息如下

源端环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.191Centos7.66.2.8x86_647001master
192.168.1.191Centos7.66.2.8x86_647002master
192.168.1.191Centos7.66.2.8x86_647003master
192.168.1.191Centos7.66.2.8x86_647004slave
192.168.1.191Centos7.66.2.8x86_647005slave
192.168.1.191Centos7.66.2.8x86_647006slave

目标端环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.192Centos7.66.2.8x86_647001master
192.168.1.192Centos7.66.2.8x86_647002master
192.168.1.192Centos7.66.2.8x86_647003master
192.168.1.192Centos7.66.2.8x86_647004slave
192.168.1.192Centos7.66.2.8x86_647005slave
192.168.1.192Centos7.66.2.8x86_647006slave

4.2、安装redis-shake

1、源端创建测试数据

[root@localhost ~]# for line in {1..1000};do /data/pkgs/redis/7001/bin/redis-cli -h 192.168.1.191 -p 7001 -c -a 1UEJjjGfYZU7dCWy set ops_${line} ${line}; done

2、分别在三个主节点上下载解压redis-shake文件

[root@localhost ~]# mkdir redis-shake1 && cd redis-shake1
[root@localhost redis-shake1]# wget https://github.com/alibaba/RedisShake/releases/download/v3.1.7/redis-shake-linux-amd64.tar.gz
[root@localhost redis-shake1]# tar axf redis-shake-linux-amd64.tar.gz

[root@localhost ~]# mkdir redis-shake2 && cd redis-shake2
[root@localhost redis-shake2]# wget https://github.com/alibaba/RedisShake/releases/download/v3.1.7/redis-shake-linux-amd64.tar.gz
[root@localhost redis-shake2]# tar axf redis-shake-linux-amd64.tar.gz

[root@localhost ~]# mkdir redis-shake1 && cd redis-shake3
[root@localhost redis-shake3]# wget https://github.com/alibaba/RedisShake/releases/download/v3.1.7/redis-shake-linux-amd64.tar.gz
[root@localhost redis-shake3]# tar axf redis-shake-linux-amd64.tar.gz

3、修改配置文件

说明:如果源库为集群架构,需要为N个节点启动N个redis-shake工具,源端分别为各节点的连接地址,目标端为相同目标实例地址。源库集群架构为三主三从,所以分别在三个主节点上分别启动redis-shake工具即可,目标端为三个主节点地址即可。

主节点一(192.168.1.191:7001)

[root@localhost redis-shake1]# vim sync.toml
type = "sync"

[source]
version = 6.2 # redis version, such as 2.8, 4.0, 5.0, 6.0, 6.2, 7.0, ...
address = "192.168.1.191:7001"
username = "" # keep empty if not using ACL
password = "1UEJjjGfYZU7dCWy" # keep empty if no authentication is required
tls = false
elasticache_psync = "" # using when source is ElastiCache. ref: https://github.com/alibaba/RedisShake/issues/373

[target]
type = "cluster" # "standalone" or "cluster"
version = 6.2 # redis version, such as 2.8, 4.0, 5.0, 6.0, 6.2, 7.0, ...
# When the target is a cluster, write the address of one of the nodes.
# redis-shake will obtain other nodes through the `cluster nodes` command.
address = "192.168.1.192:7001"
username = "" # keep empty if not using ACL
password = "1UEJjjGfYZU7dCWy" # keep empty if no authentication is required
tls = false

主节点二(192.168.1.191:7002)

[root@localhost redis-shake2]# vim sync.toml
type = "sync"

[source]
version = 6.2 # redis version, such as 2.8, 4.0, 5.0, 6.0, 6.2, 7.0, ...
address = "192.168.1.191:7002"
username = "" # keep empty if not using ACL
password = "1UEJjjGfYZU7dCWy" # keep empty if no authentication is required
tls = false
elasticache_psync = "" # using when source is ElastiCache. ref: https://github.com/alibaba/RedisShake/issues/373

[target]
type = "cluster" # "standalone" or "cluster"
version = 6.2 # redis version, such as 2.8, 4.0, 5.0, 6.0, 6.2, 7.0, ...
# When the target is a cluster, write the address of one of the nodes.
# redis-shake will obtain other nodes through the `cluster nodes` command.
address = "192.168.1.192:7002"
username = "" # keep empty if not using ACL
password = "1UEJjjGfYZU7dCWy" # keep empty if no authentication is required
tls = false

主节点三(192.168.1.191:7003)

[root@localhost redis-shake3]# vim sync.toml
type = "sync"

[source]
version = 6.2 # redis version, such as 2.8, 4.0, 5.0, 6.0, 6.2, 7.0, ...
address = "192.168.1.191:7003"
username = "" # keep empty if not using ACL
password = "1UEJjjGfYZU7dCWy" # keep empty if no authentication is required
tls = false
elasticache_psync = "" # using when source is ElastiCache. ref: https://github.com/alibaba/RedisShake/issues/373

[target]
type = "cluster" # "standalone" or "cluster"
version = 6.2 # redis version, such as 2.8, 4.0, 5.0, 6.0, 6.2, 7.0, ...
# When the target is a cluster, write the address of one of the nodes.
# redis-shake will obtain other nodes through the `cluster nodes` command.
address = "192.168.1.192:7003"
username = "" # keep empty if not using ACL
password = "1UEJjjGfYZU7dCWy" # keep empty if no authentication is required
tls = false

4.3、redis-shake执行数据迁移

1、分别在三个主节点上,执行下述命令启动redis-shake,redis-shake将开始执行数据迁移

[root@localhost redis-shake1]# ./redis-shake sync.toml
[root@localhost redis-shake2]# ./redis-shake sync.toml
[root@localhost redis-shake3]# ./redis-shake sync.toml

2、暂停向源库写入数据,等待返回日志中allowOps对应值连续多次为0时,使用Ctrl+C组合键停止运行redis-shake,此时目标库的数据与源库完全一致,您可以将业务的数据库服务由自建Redis数据库切换至Tair或Redis实例。


4.4、校验迁移后的数据

参考官网:校验迁移后的数据

说明:redis-full-check is used to compare whether two redis have the same data. redis-full-check用于比较2个redis数据是否一致,支持单节点、主从、集群版、以及多种proxy,支持同构以及异构对比,redis的版本支持2.x-5.x。当前redis版本为6.x,也是可以使用,因为测试的不是很全面,也有可能会在某些场景下存在问题。

[root@localhost ~]# wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz
[root@localhost ~]# tar axf redis-full-check-1.4.8.tar.gz && cd redis-full-check-1.4.8
[root@localhost redis-full-check-1.4.8]# ./redis-full-check -s "192.168.1.191:7001;192.168.1.191:7002;192.168.1.191:7003" -p 1UEJjjGfYZU7dCWy \
-t "192.168.1.192:7001;192.168.1.192:7002;192.168.1.192:7003" -a 1UEJjjGfYZU7dCWy \
--sourcedbtype=1 --targetdbtype=1

说明:-s表示源端Redis的连接地址和端口,如果源Redis为集群版,集群中每个地址间需要以半角分号(;)分割不同的连接地址,-s后必须接三个主节点地址或者三个从节点地址,不能把三个主节点和三个从节点全部写上。-t表示目的端Redis的连接地址和端口,如果目的Redis为集群版,集群中每个地址间需要以半角分号(;)分割不同的连接地址,-t后必须接三个主节点地址或者三个从节点地址,不能把三个主节点和三个从节点全部写上。

说明:redis-full-check参数如下所示:

在这里插入图片描述

说明:执行完成后命令行输出校对结,如果此处为0,则两端数据一致

在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

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

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

相关文章

如何对【javaSE】语法阶段复习

下面是我对学习java阶段的总复习,我愿称之为【复习宝典】 如果你对java的部分语法阶段的知识有所困惑,进来看看吧! 文章目录 目录 文章目录 一、初始java 1.1java 的由来 1.2JDK安装 1.3main方法的介绍 二、数据类型和变量 2.1数据类型 三、运…

xxljob 里面 InheritableThreadLocal详解,XxlJobContext类的详解

目录 1 需求2 XxlJobContext类3 InheritableThreadLocal 类可以做什么1 需求 在xxljob 里面,有一个地方使用到了InheritableThreadLocal类 我们先说XxlJobContext类是干什么的,里面有什么东西 2 XxlJobContext类 这个类就是一个实体类,可以理解为实体类,里面有属性,有g…

Spring Boot读取配置文件内容的三种方式

系列文章目录 Spring Boot[概述、功能、快速入门]_心态还需努力呀的博客-CSDN博客 该系列文章持续更新中~ 目录 系列文章目录 前言 一、Value 二、Environment 2.1 注入对象 2.2 调用获取属性的方法 2.3 上述两种方法对比 三、ConfigurationProperties 3.1 创建一个实…

前端工程师leetcode算法面试必备-简单的二叉树

一、前言 本难度的题目主要考察二叉树的基本概念和操作。 1、基本概念 树是计算机科学中经常用到的一种非线性数据结构,以分层的形式存储数据。二叉树是一种特殊的树结构,每个节点最多有两个子树,通常子树被称作“左子树”和“右子树”。 …

在结构异质的云杉林中使用机载激光扫描仪数据进行单树分割

论文题目:Single Tree Segmentation Using Airborne Laser Scanner Data in a Structurally Heterogeneous Spruce Forest Abstract 在这项研究中,我们提出了一种基于机载激光扫描的树冠表面模型 (CSM) 及其相应点云的单树分割和表征的新方法。该方法包…

AI算法工程师 | 09机器学习-概率图模型(一)概率图模型概述

目录机器学习 - 概率图模型 之 概率图模型概述1、概率图模型学习的意义2、有向图和无向图3、生成式模型与判别式模型机器学习 - 概率图模型 之 概率图模型概述 本阶段将开启 概率图模型系列 的旅程。 1、概率图模型学习的意义 从自然语言处理 NLP 的角度看: 在自…

前端性能优化(四):资源优化

目录 一:资源的压缩与合并 1.1.为什么要压缩&合并 1.2.HTML压缩: 1.3.CSS压缩: 1.4.JS 压缩与混淆: 1.5.CSS JS 文件合并: 二:图片格式优化 2.1.JPEG/JPG: 2.2.PNG: 2…

linux之终端里sqlite数据库的使用

一. linux下安装数据库和创建一个数据库 1.安装命令: (1)sudo apt-get install sqlite (2) sudo apt-get install libsqlite3-dev 2.安装完后,创建一个数据库,终端下输入命令 【sqlite3 数据库名字 】数据库名字以.db 结尾格式 创建数据库student.db 【 …

node.js--vm沙箱逃逸初探

前言 前几天遇到一个考察vm沙箱逃逸的题目,由于这个点是第一次听说,所以就花时间了解了解什么是沙箱逃逸。此篇文章是对于自己初学vm沙箱逃逸的学习记录,若记录知识有误,欢迎师傅们指正。 什么是沙箱 就只针对于node.js而言&am…

有关于huggingface tokenizer的text_pair

tokenizer有一个名为text pair的参数,这个参数在做NLI任务的时候很有用,因为输入不是一个single sentence,而是sentence pair。 但是这个参数的类型让人非常confused,而且同时还有一个text参数,让人不知道传入的sente…

Java-集合(2)

List集合 List接口是Collection接口的子接口 List集合类的元素是有序的(添加顺序和取出顺序是一致的)且可重复List集合类的每个元素都有对应的索引(和数组索引是一样的) List集合的常用方法 add(int index Object ele):在index索引位置插…

软件供应链安全中:攻击面远超想象

| 软件供应链攻击3年飙升742% | 引人注目的软件供应链攻击正在上升。欧盟网络安全机构ENISA报告称,自2020年初以来,有组织的软件供应链攻击数量增加了4倍。Gartner认为,这一趋势将持续下去。在《软件工程领导者如何降低软件供应链安全风险》…

dubbo学习笔记1(小d课堂)

常见的dubbo项目分层: 搭建springbootdubbo环境 我们首先用idea创建一个maven项目: 我们把src删除,在里面创建module: 然后接下来我们就要去用springboot去整合dubbo。 我们可以去github上去搜索dubbo,会找到dubbo-s…

心理应激微反应刑事侦查应用,社交行为、情绪行为、生物行为,说谎掩饰,单向表达不分析,情绪反应管理机制,惊讶,厌恶,愤怒,恐惧,悲伤,愉悦

心理应激微反应刑事侦查应用,社交行为、情绪行为、生物行为,说谎掩饰,单向表达不分析,情绪反应管理机制,惊讶,厌恶,愤怒,恐惧,悲伤,愉悦 提示:系列…

【uni-app学习之日历组件】(calendar 底部可展开 折叠)

链接 效果图 代码块 <template><tmt-calendar defaultDate"2021-11-03" :point-list"[2022-03-20,2022-04-01,2022-04-02,2022-04-05]" :show"true" changeDate"changeDate"></tmt-calendar> </template>参…

【王道操作系统】4.1.1 初识文件管理概念和功能

初识文件管理概念和功能 文章目录初识文件管理概念和功能1.文件的属性2.文件内部的数据如何组织起来3.文件之间应该如何组织起来4.操作系统应该向上提供哪些功能5.从上往下看&#xff0c;文件应该如何存放在外存6.其他需要由操作系统实现的文件管理功能1.文件的属性 2.文件内部…

STM32——TIM编码器接口

文章目录一、编码器接口简介二、正交编码器三、通用定时器框图四、编码器接口基本结构五、工作模式六、实例&#xff08;均不反相&#xff09;七、实例&#xff08;TI1反相&#xff09;八、编码器接口测速电路设计关键代码一、编码器接口简介 Encoder Interface 编码器接口编码…

pycharm配置详解

配置解释器File-->setting-->Project&#xff1a;somename-->Project InterpreterPycharm下Python环境没有块注释"""something"""是文档&#xff0c;不是块注释Python中就没有块注释Pycharm版本控制配置Pycharm中的快捷键pycharm中自定…

手把手教你用springboot实现jdk文档搜索引擎

目录 项目背景 项目描述 项目整体架构 项目流程 构建索引 项目背景 搜索引擎是我们经常会用到的工具&#xff0c;例如我们熟知的百度&#xff0c;谷歌等搜索引擎。除了网络搜索引擎&#xff0c;还有很多地方也有搜索引擎的身影&#xff0c;例如视频网站的搜索框&#xff0c;…

Windows系统下使用mingw32编译curl-7.87.0办法

使用工具&#xff1a;Windows10QT5.14.2CMake (cmake-gui)curl-7.87.0 编译办法&#xff1a; 1、下载CURL源码&#xff1a;curl - Download&#xff0c;解压缩zip文件到指定路径下&#xff08;如&#xff1a;D:\QTCode\curl-7.87.0&#xff09; 2、新增环境变量&#xff0c;打…