银河麒麟下Redis的安装和集群配置

news/2025/11/26 13:55:03/文章来源:https://www.cnblogs.com/ccta/p/19272553

1 Redis集群简介   Redis集群和高可用有几种方式:其中一种是主从复制,实现数据的多机备份和读操作的负载均衡。一主多从,主库支持读写操作,从库只支持读。在主从复制基础上,哨兵实现了自动化的故障恢复。通过哨兵监控主节点状态,主节点宕机时自动切换到从节点。另外一种是集群,多节点分片存储,结合主从复制,实现故障切换。本例主要介绍主从复制加哨兵模式和集群模式。 2 Redis配置规划 2.1 Redis哨兵模式规划   本次计划使用两台虚拟机进行Redis哨兵,每台虚拟机运行Redis节点一个、Redis哨兵服务一个。10.10.1.45上的Redis节点为初始的主节点、10.10.1.46上的Redis节点为初始的从节点。 服务器 服务器一 服务器二 IP地址 10.10.1.45 10.10.1.46 安装用户 kylin(管理员) 安装目录 /data/redis 节点数据目录 /data/redis/data 节点配置目录 /data/redis/conf 节点日志目录 /data/redis/logs Redis端口 6379 Redis密码 142857 哨兵端口 26379 哨兵密码 无 主从同步密码 142857 主从组名 mymaster 2.2 Redis集群模式规划   本次计划使用三台虚拟机进行Redis集群,每台虚拟机运行集群主、备节点各一个。三台服务器的节点遵循循环主备关系,即A服务器上的主节点对应备节点在B服务器上,B服务器上的主节点对应备节点在C服务器上,C服务器上的主节点对应备节点在A服务器上。 服务器 服务器一 服务器二 服务器三 IP地址 10.10.1.41 10.10.1.42 10.10.1.43 安装用户 kylin(管理员) 安装目录 /data/redis 主节点数据目录 /data/redis/data/6379 从节点数据目录 /data/redis/data/6380 节点配置目录 /data/redis/conf 节点日志目录 /data/redis/logs 主节点端口 6379 从节点端口 6380 Redis密码 142857 主从同步密码 142857 3 安装Redis软件 3.1 安装版本说明   银河麒麟V10的桌面版和高级服务器版的安装体系差异较大,默认已经安装的包也不同,因此在编译Redis之前,银河麒麟V10的桌面版和高级服务器版需要安装不同的包。本例基于以下银河麒麟版本建立。   Kylin-Desktop-V10-GFB-HWE-Release-020-X86_64   Kylin-Desktop-V10-GFB-020-Release-20.1.3-ARM64   Kylin-Server-V10-GFB-Release-030-X86_64   Kylin-Server-V10-GFB-030-Release-30.1.3-ARM64 3.2 麒麟V10桌面版(GFB) 3.2.1 安装前准备   使用管理员用户,创建安装文件目录。 kylin@KL1:~$ mkdir Install 3.2.2 安装g++   银河麒麟V10国防桌面版使用源代码编译的方式安装Redis,需要先安装g++。银河麒麟V10使用的gcc版本是9.3.0,g++也应使用相同的版本,需要安装g++和libstdc++两个包。可以从Ubuntu网站获取“g++-9_9.3.0-10ubuntu2_amd64.deb”、“libstdc++-9-dev_9.3.0-10ubuntu2_amd64.deb”两个包。 kylin@KL1:~$ gcc --version gcc (Ubuntu 9.3.0-10kylin2) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   管理员账户使用sudo dpkg -i命令安装libstdc++和g++。 kylin@KL1:~/Install$ sudo dpkg -i libstdc++-9-dev_9.3.0-10ubuntu2_amd64.deb g++-9_9.3.0-10ubuntu2_amd64.deb 正在选中未选择的软件包 libstdc++-9-dev:amd64。 (正在读取数据库 ... 系统当前共安装有 186622 个文件和目录。) 准备解压 libstdc++-9-dev_9.3.0-10ubuntu2_amd64.deb ... 正在解压 libstdc++-9-dev:amd64 (9.3.0-10ubuntu2) ... 正在选中未选择的软件包 g++-9。 准备解压 g++-9_9.3.0-10ubuntu2_amd64.deb ... 正在解压 g++-9 (9.3.0-10ubuntu2) ... 正在设置 libstdc++-9-dev:amd64 (9.3.0-10ubuntu2) ... 正在设置 g++-9 (9.3.0-10ubuntu2) ... 正在处理用于 man-db (2.9.1-1kylin0k1) 的触发器 ...   建立一个符号连接,把/usr/bin目录下的x86_64-linux-gnu-g++-9链接到g++。 kylin@KL1:~/Install$ sudo ln -s /usr/bin/x86_64-linux-gnu-g++-9 /usr/bin/g++ 3.2.3 安装tcl   银河麒麟V10国防桌面版使用源代码编译的方式安装Redis,需要先安装tcl。Redis8.2要求tcl版本8.5以上,需要安装tcl和libtcl两个包。从银河麒麟网站获取“libtcl8.6_8.6.10+dfsg-1_amd64.deb”包,从Ubuntu网站上获取“tcl8.6_8.6.1-4ubuntu1_amd64.deb”包。   管理员账户使用sudo dpkg -i命令安装libtcl和tcl。 kylin@KL1:~/Install$ sudo dpkg -i libtcl8.6_8.6.10+dfsg-1_amd64.deb tcl8.6_8.6.1-4ubuntu1_amd64.deb 正在选中未选择的软件包 libtcl8.6:amd64。 (正在读取数据库 ... 系统当前共安装有 187471 个文件和目录。) 准备解压 libtcl8.6_8.6.10+dfsg-1_amd64.deb ... 正在解压 libtcl8.6:amd64 (8.6.10+dfsg-1) ... 正在选中未选择的软件包 tcl8.6。 准备解压 tcl8.6_8.6.1-4ubuntu1_amd64.deb ... 正在解压 tcl8.6 (8.6.1-4ubuntu1) ... 正在设置 libtcl8.6:amd64 (8.6.10+dfsg-1) ... 正在设置 tcl8.6 (8.6.1-4ubuntu1) ... 正在处理用于 libc-bin (2.31-0kylin9.1k20.8) 的触发器 ... 正在处理用于 man-db (2.9.1-1kylin0k1) 的触发器 ... 3.3 银河麒麟高级服务器版(GFB) 3.3.1 安装前准备   银河麒麟V10高级服务器版,允许使用root直接登录,这里安全起见,创建用户kylin并加入wheel组,作为管理员用户使用。 [root@localhost ~]# adduser kylin [root@localhost ~]# passwd kylin 更改用户 kylin 的密码 。 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [root@localhost ~]# usermod -aG wheel kylin   再使用root用户创建/data共享目录。 [root@localhost ~]# mkdir /data [root@localhost ~]# chmod a+rwx /data [root@localhost ~]# chmod -t /data   使用root用户修改主机名,并重新登录。 [root@localhost ~]# hostnamectl set-hostname KL1 [root@localhost ~]# logout   使用kylin用户创建目录Install用于放置所有安装文件。 [kylin@KL1 ~]$ mkdir Install 3.4 编译Redis   解压缩redis-8.2.1.tar.gz包。 kylin@KL1:~/Install$ tar -zxf redis-8.2.1.tar.gz   进入redis解压后目录下的deps目录,运行make fast_float和make jemalloc。银河麒麟高级服务器版不需要此步骤。 kylin@KL1:~/Install$ cd redis-8.2.1/deps/ kylin@KL1:~/Install/redis-8.2.1/deps$ make fast_float MAKE fast_float cd fast_float && make libfast_float CFLAGS="" LDFLAGS="" make[1]: 进入目录“/home/kylin/redis-8.2.1/deps/fast_float” g++ -Wall -O3 -std=c++11 -DFASTFLOAT_ALLOWS_LEADING_PLUS -c fast_float_strtod.cpp ar -r libfast_float.a fast_float_strtod.o ar: 正在创建 libfast_float.a make[1]: 离开目录“/home/kylin/Install/redis-8.2.1/deps/fast_float” kylin@KL1:~/Install/redis-8.2.1/deps$ make jemalloc MAKE jemalloc cd jemalloc && ./configure --disable-cxx --with-version=5.3.0-0-g0 --with-lg-quantum=3 --disable-cache-oblivious --with-jemalloc-prefix=je_ CFLAGS="" LDFLAGS="" checking for xsltproc... false checking for gcc... gcc ………… 这里有很多提示信息,此处省略。 ………… make[1]: 离开目录“/home/kylin/Install/redis-8.2.1/deps/jemalloc”   进入redis解压后目录,使用make指令编译Redis。 kylin@KL1:~/Install/redis-8.2.1/deps$ cd .. kylin@KL1:~/Install/redis-8.2.1$ make for dir in src; do make -C $dir all; done make[1]: 进入目录“/home/kylin/Install/redis-8.2.1/src” CC Makefile.dep rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html Makefile.dep *.so ………… 这里有很多提示信息,此处省略。 ………… LINK redis-benchmark INSTALL redis-check-rdb INSTALL redis-check-aof Hint: It's a good idea to run 'make test' ;) make[1]: 离开目录“/home/kylin/Install/redis-8.2.1/src”   使用make test指令进行测试。 kylin@KL1:~/Install/redis-8.2.1$ make test for dir in src; do make -C $dir test; done make[1]: 进入目录“/home/kylin/Install/redis-8.2.1/src” Cleanup: may take some time... OK Starting test server at port 21079 [ready]: 387245 Testing unit/acl-v2 ………… 这里有很多提示信息,此处省略。 ………… 515 seconds - defrag 0 seconds - list-large-memory 1 seconds - set-large-memory \o/ All tests passed without errors! Cleanup: may take some time... OK make[1]: 离开目录“/home/kylin/Install/redis-8.2.1/src” 3.5 安装Redis   按照规划创建redis目录。(哨兵模式不需要创建6380目录)。 kylin@KL1:~/Install/redis-8.2.1$ mkdir /data/redis kylin@KL1:~/Install/redis-8.2.1$ mkdir /data/redis/data kylin@KL1:~/Install/redis-8.2.1$ mkdir /data/redis/data/6379 kylin@KL1:~/Install/redis-8.2.1$ mkdir /data/redis/data/6380 kylin@KL1:~/Install/redis-8.2.1$ mkdir /data/redis/conf kylin@KL1:~/Install/redis-8.2.1$ mkdir /data/redis/logs   使用make install指令进行安装,使用PREFIX参数指定安装目录。 kylin@KL1:~/Install/redis-8.2.1$ make install PREFIX=/data/redis for dir in src; do make -C $dir install; done make[1]: 进入目录“/home/kylin/Install/redis-8.2.1/src” Hint: It's a good idea to run 'make test' ;) INSTALL redis-server INSTALL redis-benchmark INSTALL redis-cli make[1]: 离开目录“/home/kylin/Install/redis-8.2.1/src”   修改配置文件,加入REDIS_HOME环境变量,扩充PATH环境变量。 kylin@KL1:~/Install/redis-8.2.1$ sudo vi /etc/profile ………… 原有的配置信息。 ………… export REDIS_HOME=/data/redis export PATH=$PATH:$REDIS_HOME/bin   在另外两台服务器上同样安装Redis。注意,银河麒麟V10高级服务器版默认已经安装了Redis 4.0.11版,如果直接输入redis-server、redis-cli会默认调用Redis 4.0.11版的相应程序,因此在后续配置时需要指明程序目录,如:“/data/redis/bin/redis-server”、“/data/redis/bin/redis-cli”。 4 配置Redis哨兵模式 4.1 开放防火墙端口   麒麟高级服务器版默认开启了防火墙,需要开放规划的Redis相关的端口,包括6379、26379等,以上端口均为TCP协议。 kylin@KL5 ~$ sudo firewall-cmd --add-port=6379/tcp --permanent success kylin@KL5 ~$ sudo firewall-cmd --add-port=26379/tcp --permanent success kylin@KL5 ~$ sudo firewall-cmd --reload success kylin@KL5 ~$ sudo firewall-cmd --list-ports 6379/tcp 26379/tcp 4.2 修改配置文件   从redis解压后目录复制文件redis.conf到“/data/redis/conf/”目录并改名为redis_6379.conf,从redis解压后目录复制文件sentinel.conf到“/data/redis/conf/”目录。 kylin@KL5:~/Install/redis-8.2.1$ cp redis.conf /data/redis/conf/redis_6379.conf kylin@KL5:~/Install/redis-8.2.1$ cp sentinel.conf /data/redis/conf/ kylin@KL5:~/Install/redis-8.2.1$ cd /data/redis/conf/   修改每台服务器上的配置文件redis_6379.conf中以下内容。 kylin@KL5:/data/redis/conf$ vi redis_6379.conf # 监听所有网络,默认127.0.0.1。 bind 0.0.0.0 # 监听端口。 port 6379 # 允许后台运行。 daemonize yes # PID 存放路径。 pidfile /data/redis/redis_6379.pid # 日志存放路径。 logfile /data/redis/logs/redis_6379.log # 数据目录。 dir /data/redis/data/6379 # 主服务器地址,只在从机上配置。 replicaof 10.10.1.45 6379 # 主从同步master的密码。 masterauth 142857 # Redis密码。 requirepass 142857   修改每台服务器上的配置文件sentinel.conf中以下内容。其中最少切换哨兵数量为最少几个哨兵认为主服务器不可用时,就启动切换。如果是三台服务器集群,则此值应为2。 kylin@KL5:/data/redis/conf$ vi sentinel.conf # 禁用保护模式。 protected-mode no # 允许后台运行。 daemonize yes # PID 存放路径。 pidfile /data/redis/sentinel.pid # 日志存放路径。 logfile /data/redis/logs/sentinel.log # 哨兵监控集群名称、主机地址、主机端口、最少切换哨兵数量。 sentinel monitor mymaster 10.10.1.45 6379 1 # 哨兵的认证密码。 sentinel auth-pass mymaster 142857   启动Redis服务和哨兵服务,启动顺序为主Redis服务、从Redis服务、主从哨兵服务。 kylin@KL5:~$ redis-server /data/redis/conf/redis_6379.conf kylin@KL6:~$ redis-server /data/redis/conf/redis_6379.conf kylin@KL5:~$ redis-sentinel /data/redis/conf/sentinel.conf kylin@KL6:~$ redis-sentinel /data/redis/conf/sentinel.conf 4.3 测试主从复制   使用客户端工具连接主机,插入一条数据。 主机插入数据   使用客户端工具连接从机,可以看到从主机插入的数据。 从机查看数据   使用客户端工具连接从机,插入数据,会报只读错误。 从机插入数据   使用客户端工具连接哨兵,可以正常插入数据。 哨兵模式连接1 哨兵模式连接2 哨兵模式连接3 4.4 测试主从切换   在任意一台主机上使用redis-cli连接主机节点查看主从信息。 [kylin@KL5 ~]$ /data/redis/bin/redis-cli -a 142857 -h 10.10.1.45 -p 6379 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.10.1.45:6379> info replication # Replication role:master connected_slaves:1 slave0:ip=10.10.1.46,port=6379,state=online,offset=625523,lag=0 master_failover_state:no-failover master_replid:32d947d15baa4b28ab4c2c7d7611c806071497f5 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:625791 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:625791   在任意一台主机上使用redis-cli连接从机节点查看主从信息。 [[kylin@KL6 ~]$ /data/redis/bin/redis-cli -a 142857 -h 10.10.1.46 -p 6379 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.10.1.46:6379> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_read_repl_offset:598455 slave_repl_offset:598455 replica_full_sync_buffer_size:0 replica_full_sync_buffer_peak:0 master_current_sync_attempts:172 master_total_sync_attempts:172 master_link_down_since_seconds:173 total_disconnect_time_sec:2362 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:32d947d15baa4b28ab4c2c7d7611c806071497f5 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:598455 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:574 repl_backlog_histlen:597882   测试使用暂停虚拟机的方法模拟主机节点故障,本次模拟10.10.1.45故障。此时发生主从切换。通过查看从机上的日志可以看到切换过程。 [kylin@KL6 ~]$ tail -f /data/redis/logs/redis_6379.log 1316020:M 25 Sep 2025 17:53:24.248 * Connection with master lost. 1316020:M 25 Sep 2025 17:53:24.248 * Caching the disconnected master state. 1316020:M 25 Sep 2025 17:53:24.248 * Discarding previously cached master state. 1316020:M 25 Sep 2025 17:53:24.248 * Setting secondary replication ID to 32d947d15baa4b28ab4c2c7d7611c806071497f5, valid up to offset: 730848. New replication ID is 6953fb9624393785ffb6185768aa6a31da91a90a 1316020:M 25 Sep 2025 17:53:24.248 * MASTER MODE enabled (user request from 'id=2650 addr=10.10.1.46:54626 laddr=10.10.1.46:6379 fd=12 name=sentinel-5b7103f3-cmd age=313 idle=0 flags=x db=0 sub=0 psub=0 ssub=0 multi=4 watch=0 qbuf=188 qbuf-free=20286 argv-mem=4 multi-mem=169 rbs=2048 rbp=1024 obl=45 oll=0 omem=0 tot-mem=23717 events=r cmd=exec user=default redir=-1 resp=2 lib-name= lib-ver= io-thread=0 tot-net-in=28007 tot-net-out=1192513 tot-cmds=645') 1316020:M 25 Sep 2025 17:53:24.257 * CONFIG REWRITE executed with success.   此时,使用客户端工具连接原从机,插入数据,可以正常插入。 从机切为主机   此时连接原从机节点,查看主从信息,显示原从机节点自动升级为主机节点。 [kylin@KL6 ~]$ /data/redis/bin/redis-cli -a 142857 -h 10.10.1.46 -p 6379 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.10.1.46:6379> info replication # Replication role:master connected_slaves:0 master_failover_state:no-failover master_replid:6953fb9624393785ffb6185768aa6a31da91a90a master_replid2:32d947d15baa4b28ab4c2c7d7611c806071497f5 master_repl_offset:750613 second_repl_offset:730848 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:574 repl_backlog_histlen:750040   将10.10.1.45恢复,再次查看原从机日志消息,可以看到10.10.1.45已经上线,但成为从机。 [kylin@KL6 ~]$ tail -f /data/redis/logs/redis_6379.log 1316020:M 25 Sep 2025 17:59:39.617 * Replica 10.10.1.45:6379 asks for synchronization 1316020:M 25 Sep 2025 17:59:39.617 * Partial resynchronization not accepted: Requested offset for second ID was 736647, but I can reply up to 730848 1316020:M 25 Sep 2025 17:59:39.617 * Replica 10.10.1.45:6379 is capable of rdb channel synchronization, and partial sync isn't possible. Full sync will continue with dedicated rdb channel. 1316020:M 25 Sep 2025 17:59:39.618 * Replica 10.10.1.45:6379 asks for synchronization 1316020:M 25 Sep 2025 17:59:39.618 * Full resync requested by replica 10.10.1.45:6379 (rdb-channel) 1316020:M 25 Sep 2025 17:59:39.618 * Delay next BGSAVE for diskless SYNC 1316020:M 25 Sep 2025 17:59:44.655 * Starting BGSAVE for SYNC with target: replicas sockets (rdb-channel) 1316020:M 25 Sep 2025 17:59:44.655 * Starting to deliver RDB and replication stream to replica: 10.10.1.45:6379 1316020:M 25 Sep 2025 17:59:44.655 * Background RDB transfer started by pid 1394719 to replica socket 1394719:C 25 Sep 2025 17:59:44.657 * Fork CoW for RDB: current 2 MB, peak 2 MB, average 2 MB 1316020:M 25 Sep 2025 17:59:44.668 * Connection with replica (rdbchannel) 10.10.1.45:6379 lost. 1316020:M 25 Sep 2025 17:59:44.668 * Synchronization with replica 10.10.1.45:6379 succeeded 1316020:M 25 Sep 2025 17:59:44.756 * Background RDB transfer terminated with success [kylin@KL6 ~]$ /data/redis/bin/redis-cli -a 142857 -h 10.10.1.46 -p 6379 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.10.1.46:6379> info replication # Replication role:master connected_slaves:1 slave0:ip=10.10.1.45,port=6379,state=online,offset=759951,lag=0 master_failover_state:no-failover master_replid:6953fb9624393785ffb6185768aa6a31da91a90a master_replid2:32d947d15baa4b28ab4c2c7d7611c806071497f5 master_repl_offset:760086 second_repl_offset:730848 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:574 repl_backlog_histlen:759513 4.5 注册系统服务   使用管理员账户,创建服务描述文件redis_6379.service。 kylin@KL5:~$ sudo vi /etc/systemd/system/redis_6379.service # 基本信息。 [Unit] Description=Redis Server 6379 After=network.target Wants=network.target # 服务设置。 [Service] # 启动和停止命令。 Type=forking ExecStart=/data/redis/bin/redis-server /data/redis/conf/redis_6379.conf ExecStop=/data/redis/bin/redis-cli -a 142857 -h 127.0.0.1 -p 6379 shutdown # 运行用户与权限。 User=kylin Group=kylin # 服务生命周期管理。 Restart=on-failure RestartSec=30s StartLimitInterval=10 # 日志设置。 StandardOutput=syslog StandardError=syslog SyslogIdentifier=redis-6379 # 资源限制。 LimitNOFILE=65536 MemoryMax=16G # 安装分类。 [Install] WantedBy=multi-user.target   使用管理员账户,创建服务描述文件redis_sentinel.service。 kylin@KL5:~$ sudo vi /etc/systemd/system/redis_sentinel.service # 基本信息。 [Unit] Description=Redis Sentinel After=network.target Wants=network.target # 服务设置。 [Service] # 启动和停止命令。 Type=forking ExecStart=/data/redis/bin/redis-sentinel /data/redis/conf/sentinel.conf ExecStop=/data/redis/bin/redis-cli -h 127.0.0.1 -p 26379 shutdown # 运行用户与权限。 User=kylin Group=kylin # 服务生命周期管理。 Restart=on-failure RestartSec=30s StartLimitInterval=10 # 日志设置。 StandardOutput=syslog StandardError=syslog SyslogIdentifier=redis-sentinel # 资源限制。 LimitNOFILE=65536 MemoryMax=16G # 安装分类。 [Install] WantedBy=multi-user.target   使用systemctl daemon-reload加载服务,使用systemctl enable设置服务自启动,使用systemctl start启动服务。 kylin@KL5:~$ sudo systemctl daemon-reload kylin@KL5:~$ sudo systemctl enable redis_6379 Created symlink /etc/systemd/system/multi-user.target.wants/redis_6379.service → /etc/systemd/system/redis_6379.service. kylin@KL1:~$ sudo systemctl enable redis_sentinel Created symlink /etc/systemd/system/multi-user.target.wants/redis_sentinel.service → /etc/systemd/system/redis_sentinel.service. kylin@KL1:~$ sudo systemctl start redis_6379 kylin@KL1:~$ sudo systemctl start redis_sentinel   可以使用systemctl status查看服务状态,也可以查看日志确定服务是否正常启动。 5 配置Redis集群模式 5.1 开放防火墙端口   麒麟高级服务器版默认开启了防火墙,需要开放规划的Redis相关的端口,包括6379、6380、16379、16380等,以上端口均为TCP协议。 kylin@KL1 ~$ sudo firewall-cmd --add-port=6379/tcp --permanent success kylin@KL1 ~$ sudo firewall-cmd --add-port=6380/tcp --permanent success kylin@KL1 ~$ sudo firewall-cmd --add-port=16379/tcp --permanent success kylin@KL1 ~$ sudo firewall-cmd --add-port=16380/tcp --permanent success kylin@KL1 ~$ sudo firewall-cmd --reload success kylin@KL1 ~$ sudo firewall-cmd --list-ports 6379/tcp 6380/tcp 16379/tcp 16380/tcp 5.2 修改配置文件   从redis解压后目录复制redis.conf到/data/redis/conf/目录并改名为redis_6379.conf。 kylin@KL1:~/Install/redis-8.2.1$ cp redis.conf /data/redis/conf/redis_6379.conf kylin@KL1:~/Install/redis-8.2.1$ cd /data/redis/conf/   修改配置文件redis_6379.conf中以下内容。 kylin@KL1:/data/redis/conf$ vi redis_6379.conf # 监听所有网络,默认127.0.0.1。 bind 0.0.0.0 # 监听端口,主为6379,从为6380。 port 6379 # 允许后台运行。 daemonize yes # PID 存放路径。 pidfile /data/redis/redis_6379.pid # 日志存放路径。 logfile /data/redis/logs/redis_6379.log # 数据目录。 dir /data/redis/data/6379 # 主从同步master的密码。 masterauth 142857 # Redis密码。 requirepass 142857 # 接收后数据写入 appendonly.aof 文件。 appendonly yes # 开启集群。 cluster-enabled yes # 集群配置文件,由Redis自动生成。 cluster-config-file /data/redis/conf/nodes_6379.conf # 节点互连超时的阀值,单位毫秒。 cluster-node-timeout 15000 # 允许部分槽不可用 cluster-require-full-coverage no   将配置文件redis_6379.conf复制一份为redis_6380.conf,修改文件内容如下。 kylin@KL1:/data/redis/conf$ cp redis_6379.conf redis_6380.conf kylin@KL1:/data/redis/conf$ vi redis_6380.conf # 监听所有网络,默认127.0.0.1。 bind 0.0.0.0 # 监听端口,主为6379,从为6380。 port 6380 # 允许后台运行。 daemonize yes # PID 存放路径。 pidfile /data/redis/redis_6380.pid # 日志存放路径。 logfile /data/redis/logs/redis_6380.log # 数据目录。 dir /data/redis/data/6380 # 主从同步master的密码。 masterauth 142857 # Redis密码。 requirepass 142857 # 接收后数据写入 appendonly.aof 文件。 appendonly yes # 开启集群。 cluster-enabled yes # 集群配置文件,由Redis自动生成。 cluster-config-file /data/redis/conf/nodes_6380.conf # 节点互连超时的阀值,单位毫秒。 cluster-node-timeout 15000 # 允许部分槽不可用。 cluster-require-full-coverage no   启动Redis服务。 kylin@KL1:~$ redis-server /data/redis/conf/redis_6379.conf kylin@KL1:~$ redis-server /data/redis/conf/redis_6380.conf   将配置文件redis_6379.conf、redis_6380.conf复制到另外两台服务器。 kylin@KL1:~$ scp /data/redis/conf/redis_6379.conf kylin@10.10.1.42:/data/redis/conf/ redis_6379.conf 100% 109KB 56.8MB/s 00:00 kylin@KL1:~$ scp /data/redis/conf/redis_6379.conf kylin@10.10.1.43:/data/redis/conf/ redis_6379.conf 100% 109KB 67.9MB/s 00:00 kylin@KL1:~$ scp /data/redis/conf/redis_6380.conf kylin@10.10.1.42:/data/redis/conf/ redis_6380.conf 100% 109KB 56.8MB/s 00:00 kylin@KL1:~$ scp /data/redis/conf/redis_6380.conf kylin@10.10.1.43:/data/redis/conf/ redis_6380.conf 100% 109KB 67.9MB/s 00:00   启动另外两台服务器上的Redis服务。 5.3 创建集群节点   在其中一台服务器上使用redis-cli创建主节点,系统自动分配槽,接受即可。 kylin@KL1:~$ redis-cli -a 142857 --cluster create 10.10.1.41:6379 10.10.1.42:6379 10.10.1.43:6379 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. >>> Performing hash slots allocation on 3 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 M: e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 10.10.1.41:6379 slots:[0-5460] (5461 slots) master M: af75957d10c763cca25ce38418d4ebcc9109b414 10.10.1.42:6379 slots:[5461-10922] (5462 slots) master M: a16d534d6abde9dd91e0288081b009f136cec20e 10.10.1.43:6379 slots:[10923-16383] (5461 slots) master Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join . >>> Performing Cluster Check (using node 10.10.1.41:6379) M: e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 10.10.1.41:6379 slots:[0-5460] (5461 slots) master M: a16d534d6abde9dd91e0288081b009f136cec20e 10.10.1.43:6379 slots:[10923-16383] (5461 slots) master M: af75957d10c763cca25ce38418d4ebcc9109b414 10.10.1.42:6379 slots:[5461-10922] (5462 slots) master [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.   为每个主节点循环增加对应的从节点,如为A主节点增加b从节点,为B主节点增加c从节点,为C主节点增加a从节点。   将10.10.1.42:6380添加为10.10.1.41:6379的从节点。 kylin@KL1:~$ redis-cli -a 142857 --cluster add-node 10.10.1.42:6380 10.10.1.41:6379 --cluster-slave --cluster-master-id e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. >>> Adding node 10.10.1.42:6380 to cluster 10.10.1.41:6379 >>> Performing Cluster Check (using node 10.10.1.41:6379) M: e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 10.10.1.41:6379 slots:[0-5460] (5461 slots) master M: af75957d10c763cca25ce38418d4ebcc9109b414 10.10.1.42:6379 slots:[5461-10922] (5462 slots) master M: a16d534d6abde9dd91e0288081b009f136cec20e 10.10.1.43:6379 slots:[10923-16383] (5461 slots) master [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 10.10.1.42:6380 to make it join the cluster. Waiting for the cluster to join >>> Configure node as replica of 10.10.1.41:6379. [OK] New node added correctly.   将10.10.1.43:6380添加为10.10.1.42:6379的从节点。 kylin@KL1:~$ redis-cli -a 142857 --cluster add-node 10.10.1.43:6380 10.10.1.42:6379 --cluster-slave --cluster-master-id af75957d10c763cca25ce38418d4ebcc9109b414 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. >>> Adding node 10.10.1.43:6380 to cluster 10.10.1.42:6379 >>> Performing Cluster Check (using node 10.10.1.42:6379) M: af75957d10c763cca25ce38418d4ebcc9109b414 10.10.1.42:6379 slots:[5461-10922] (5462 slots) master S: 02c659db7838cdc9c77a3bb6be3bc944b3c69579 10.10.1.42:6380 slots: (0 slots) slave replicates e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 M: e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 10.10.1.41:6379 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: a16d534d6abde9dd91e0288081b009f136cec20e 10.10.1.43:6379 slots:[10923-16383] (5461 slots) master [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 10.10.1.43:6380 to make it join the cluster. Waiting for the cluster to join >>> Configure node as replica of 10.10.1.42:6379. [OK] New node added correctly.   将10.10.1.41:6380添加为10.10.1.43:6379的从节点。 kylin@KL1:~$ redis-cli -a 142857 --cluster add-node 10.10.1.41:6380 10.10.1.43:6379 --cluster-slave --cluster-master-id a16d534d6abde9dd91e0288081b009f136cec20e Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. >>> Adding node 10.10.1.41:6380 to cluster 10.10.1.43:6379 >>> Performing Cluster Check (using node 10.10.1.43:6379) M: a16d534d6abde9dd91e0288081b009f136cec20e 10.10.1.43:6379 slots:[10923-16383] (5461 slots) master M: af75957d10c763cca25ce38418d4ebcc9109b414 10.10.1.42:6379 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 02c659db7838cdc9c77a3bb6be3bc944b3c69579 10.10.1.42:6380 slots: (0 slots) slave replicates e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 S: 5e9a0509562217da0f8e62cee8c8c25b309d57b8 10.10.1.43:6380 slots: (0 slots) slave replicates af75957d10c763cca25ce38418d4ebcc9109b414 M: e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 10.10.1.41:6379 slots:[0-5460] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 10.10.1.41:6380 to make it join the cluster. Waiting for the cluster to join >>> Configure node as replica of 10.10.1.43:6379. [OK] New node added correctly.   在任意一台主机上使用redis-cli连接任意一个节点使用cluster info查看集群信息,使用cluster nodes查看集群节点。 kylin@KL1:~$ redis-cli -a 142857 -h 10.10.1.41 -p 6379 -c Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.10.1.41:6379> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:3 cluster_my_epoch:1 cluster_stats_messages_ping_sent:235 cluster_stats_messages_pong_sent:229 cluster_stats_messages_sent:464 cluster_stats_messages_ping_received:228 cluster_stats_messages_pong_received:233 cluster_stats_messages_meet_received:1 cluster_stats_messages_received:462 total_cluster_links_buffer_limit_exceeded:0 10.10.1.41:6379> cluster nodes 5e9a0509562217da0f8e62cee8c8c25b309d57b8 10.10.1.43:6380@16380 slave af75957d10c763cca25ce38418d4ebcc9109b414 0 1758097783000 2 connected af75957d10c763cca25ce38418d4ebcc9109b414 10.10.1.42:6379@16379 master - 0 1758097784000 2 connected 5461-10922 eb3f6e4a86a4c5ccfd779e7eb8ed0d795f89546c 10.10.1.41:6380@16380 slave a16d534d6abde9dd91e0288081b009f136cec20e 0 1758097784560 3 connected 02c659db7838cdc9c77a3bb6be3bc944b3c69579 10.10.1.42:6380@16380 slave e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 0 1758097785564 1 connected e2b6cc1f2f3977bc37ee9bffbf860edc26274cf6 10.10.1.41:6379@16379 myself,master - 0 0 1 connected 0-5460 a16d534d6abde9dd91e0288081b009f136cec20e 10.10.1.43:6379@16379 master - 0 1758097784000 3 connected 10923-16383 10.10.1.41:6379> quit 5.4 测试集群复制   使用客户端工具测试集群效果。 连接Redis数据库 插入测试数据 从集群其他节点查看数据 5.5 测试集群切换   在任意一台主机上使用redis-cli连接任意一个节点查看集群信息(示例中为了显示清晰,缩写了节点ID)。可以看出现在节点10.10.1.41:6379、10.10.1.42:6379、10.10.1.43:6379是主节点,10.10.1.41:6380、10.10.1.42:6380、10.10.1.43:6380是从节点。 kylin@KL1:~$ redis-cli -a 142857 -h 10.10.1.41 -p 6379 -c cluster nodes Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. e2……f6 10.10.1.41:6379@16379 myself,master - 0 0 1 connected 0-5460 af……14 10.10.1.42:6379@16379 master - 0 1758101546000 2 connected 5461-10922 a1……0e 10.10.1.43:6379@16379 master - 0 1758101544000 5 connected 10923-16383 eb……6c 10.10.1.41:6380@16380 slave a1……0e 0 1758101546975 5 connected 02……79 10.10.1.42:6380@16380 slave e2……f6 0 1758101545000 1 connected 5e……b8 10.10.1.43:6380@16380 slave af……14 0 1758101544966 2 connected   测试使用暂停虚拟机的方法模拟服务器故障,本次模拟10.10.1.43故障。此时向Redis集群中插入数据,发现耗时很久,系统正在进行集群切换。 故障时等待集群切换   此时查看查看集群信息,显示10.10.1.43:6379、10.10.1.43:6380已经失效,10.10.1.41:6380自动升级为主节点。 kylin@KL1:~$ redis-cli -a 142857 -h 10.10.1.41 -p 6379 -c cluster nodes Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. e2……f6 10.10.1.41:6379@16379 myself,master - 0 0 1 connected 0-5460 af……14 10.10.1.42:6379@16379 master - 0 1758102319735 2 connected 5461-10922 a1……0e 10.10.1.43:6379@16379 master,fail - 1758102089620 1758102087000 7 connected eb……6c 10.10.1.41:6380@16380 master - 0 1758102320000 8 connected 10923-16383 02……79 10.10.1.42:6380@16380 slave e2……f6 0 1758102320739 1 connected 5e……b8 10.10.1.43:6380@16380 slave,fail af……14 1758102091629 1758102087610 2 connecte   将10.10.1.43恢复,再次查看集群消息,可以看到10.10.1.43:6379、10.10.1.43:6380均为从节点。 kylin@KL1:~$ redis-cli -a 142857 -h 10.10.1.41 -p 6379 -c cluster nodes Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. e2……f6 10.10.1.41:6379@16379 myself,master - 0 0 1 connected 0-5460 af……14 10.10.1.42:6379@16379 master - 0 1758102599089 2 connected 5461-10922 a1……0e 10.10.1.43:6379@16379 slave eb……6c 0 1758102597000 8 connected eb……6c 10.10.1.41:6380@16380 master - 0 1758102597079 8 connected 10923-16383 02……79 10.10.1.42:6380@16380 slave e2……f6 0 1758102597000 1 connected 5e……b8 10.10.1.43:6380@16380 slave af……14 0 1758102598084 2 connected   此时用redis-cli连接10.10.1.43:6379,将其还原为主节点。 kylin@KL1:~$ redis-cli -a 142857 -h 10.10.1.43 -p 6379 -c cluster failover Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. OK kylin@KL1:~$ redis-cli -a 142857 -h 10.10.1.41 -p 6379 -c cluster nodes Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. e2……f6 10.10.1.41:6379@16379 myself,master - 0 0 1 connected 0-5460 af……14 10.10.1.42:6379@16379 master - 0 1758102761000 2 connected 5461-10922 a1……0e 10.10.1.43:6379@16379 master - 0 1758102761892 9 connected 10923-16383 eb……6c 10.10.1.41:6380@16380 slave a1……0e 0 1758102762896 9 connected 02……79 10.10.1.42:6380@16380 slave e2……f6 0 1758102759883 1 connected 5e……b8 10.10.1.43:6380@16380 slave af……14 0 1758102760000 2 connected 5.6 注册系统服务   使用管理员账户,创建服务描述文件redis_6379.service、redis_6380.service。 kylin@KL1:~$ sudo vi /etc/systemd/system/redis_6379.service # 基本信息。 [Unit] Description=Redis Master 6379 After=network.target Wants=network.target # 服务设置。 [Service] # 启动和停止命令。 Type=forking ExecStart=/data/redis/bin/redis-server /data/redis/conf/redis_6379.conf ExecStop=/data/redis/bin/redis-cli -a 142857 -h 127.0.0.1 -p 6379 shutdown # 运行用户与权限。 User=kylin Group=kylin # 服务生命周期管理。 Restart=on-failure RestartSec=30s StartLimitInterval=10 # 日志设置。 StandardOutput=syslog StandardError=syslog SyslogIdentifier=redis-6379 # 资源限制。 LimitNOFILE=65536 MemoryMax=16G # 安装分类。 [Install] WantedBy=multi-user.target   使用systemctl daemon-reload加载服务,使用systemctl enable设置服务自启动,使用systemctl start启动服务。 kylin@KL1:~$ sudo systemctl daemon-reload kylin@KL1:~$ sudo systemctl enable redis_6379 Created symlink /etc/systemd/system/multi-user.target.wants/redis_6379.service → /etc/systemd/system/redis_6379.service. kylin@KL1:~$ sudo systemctl enable redis_6380 Created symlink /etc/systemd/system/multi-user.target.wants/redis_6380.service → /etc/systemd/system/redis_6380.service. kylin@KL1:~$ sudo systemctl start redis_6379 kylin@KL1:~$ sudo systemctl start redis_6380   可以使用systemctl status查看服务状态,也可以查看日志确定服务是否正常启动。 kylin@KL1:~$ sudo systemctl status redis_6379 ● redis_6379.service - Redis Master 6379 Loaded: loaded (/etc/systemd/system/redis_6379.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2025-09-18 13:46:12 CST; 23s ago Process: 158217 ExecStart=/data/redis/bin/redis-server /data/redis/conf/redis_6379.conf (cod> Main PID: 158218 (redis-server) Tasks: 4 (limit: 997) Memory: 2.9M CGroup: /system.slice/redis_6379.service └─158218 /data/redis/bin/redis-server 0.0.0.0:6379 [cluster] 9月 18 13:46:12 KL1 systemd[1]: Starting Redis Master 6379... 9月 18 13:46:12 KL1 systemd[1]: Started Redis Master 6379. kylin@KL1:~$ tail /data/redis/logs/redis_6379.log -f 159134:M 18 Sep 2025 13:47:59.693 * Reading RDB base file on AOF loading... 159134:M 18 Sep 2025 13:47:59.693 * Loading RDB produced by version 8.2.1 159134:M 18 Sep 2025 13:47:59.693 * RDB age 7335 seconds 159134:M 18 Sep 2025 13:47:59.693 * RDB memory usage when created 2.10 Mb 159134:M 18 Sep 2025 13:47:59.694 * RDB is base AOF Zq.Zhaopin.CoM/moment/85939939 Zq.Zhaopin.CoM/moment/85939917 Zq.Zhaopin.CoM/moment/85939934 Zq.Zhaopin.CoM/moment/85939929 Zq.Zhaopin.CoM/moment/85939943 Zq.Zhaopin.CoM/moment/85939968 Zq.Zhaopin.CoM/moment/85939972 Zq.Zhaopin.CoM/moment/85939975 Zq.Zhaopin.CoM/moment/85940018 Zq.Zhaopin.CoM/moment/85940015 Zq.Zhaopin.CoM/moment/85940013 Zq.Zhaopin.CoM/moment/85940024 Zq.Zhaopin.CoM/moment/85940020 Zq.Zhaopin.CoM/moment/85940029 Zq.Zhaopin.CoM/moment/85940035 Zq.Zhaopin.CoM/moment/85940038 Zq.Zhaopin.CoM/moment/85940087 Zq.Zhaopin.CoM/moment/85940077 Zq.Zhaopin.CoM/moment/85940084 Zq.Zhaopin.CoM/moment/85940080 Zq.Zhaopin.CoM/moment/85940096 Zq.Zhaopin.CoM/moment/85940100 Zq.Zhaopin.CoM/moment/85940101 Zq.Zhaopin.CoM/moment/85940116 Zq.Zhaopin.CoM/moment/85940127 Zq.Zhaopin.CoM/moment/85940123 Zq.Zhaopin.CoM/moment/85940131 Zq.Zhaopin.CoM/moment/85940151 Zq.Zhaopin.CoM/moment/85940147 Zq.Zhaopin.CoM/moment/85940159 Zq.Zhaopin.CoM/moment/85940161 Zq.Zhaopin.CoM/moment/85940207 Zq.Zhaopin.CoM/moment/85940174 Zq.Zhaopin.CoM/moment/85940175 Zq.Zhaopin.CoM/moment/85940210 Zq.Zhaopin.CoM/moment/85940204 Zq.Zhaopin.CoM/moment/85940206 Zq.Zhaopin.CoM/moment/85940232 Zq.Zhaopin.CoM/moment/85940208 Zq.Zhaopin.CoM/moment/85940220 Zq.Zhaopin.CoM/moment/85940222 Zq.Zhaopin.CoM/moment/85940225 Zq.Zhaopin.CoM/moment/85940228 Zq.Zhaopin.CoM/moment/85940223 Zq.Zhaopin.CoM/moment/85940221 Zq.Zhaopin.CoM/moment/85940224 Zq.Zhaopin.CoM/moment/85940227 Zq.Zhaopin.CoM/moment/85940237 Zq.Zhaopin.CoM/moment/85940241 Zq.Zhaopin.CoM/moment/85940249 Zq.Zhaopin.CoM/moment/85940243 Zq.Zhaopin.CoM/moment/85940244 Zq.Zhaopin.CoM/moment/85940251 Zq.Zhaopin.CoM/moment/85940266 Zq.Zhaopin.CoM/moment/85940257 Zq.Zhaopin.CoM/moment/85940261 Zq.Zhaopin.CoM/moment/85940260 Zq.Zhaopin.CoM/moment/85940262 Zq.Zhaopin.CoM/moment/85940267 Zq.Zhaopin.CoM/moment/85940264 Zq.Zhaopin.CoM/moment/85940270 Zq.Zhaopin.CoM/moment/85940269 Zq.Zhaopin.CoM/moment/85940274 Zq.Zhaopin.CoM/moment/85940276 Zq.Zhaopin.CoM/moment/85940289 Zq.Zhaopin.CoM/moment/85940298 Zq.Zhaopin.CoM/moment/85940296 Zq.Zhaopin.CoM/moment/85940295 Zq.Zhaopin.CoM/moment/85940297 Zq.Zhaopin.CoM/moment/85940302 Zq.Zhaopin.CoM/moment/85940304 Zq.Zhaopin.CoM/moment/85940305 Zq.Zhaopin.CoM/moment/85940306 Zq.Zhaopin.CoM/moment/85940327 Zq.Zhaopin.CoM/moment/85940310 Zq.Zhaopin.CoM/moment/85940311 Zq.Zhaopin.CoM/moment/85940309 Zq.Zhaopin.CoM/moment/85940312 Zq.Zhaopin.CoM/moment/85940313 Zq.Zhaopin.CoM/moment/85940316 Zq.Zhaopin.CoM/moment/85940317 Zq.Zhaopin.CoM/moment/85940314 Zq.Zhaopin.CoM/moment/85940321 Zq.Zhaopin.CoM/moment/85940320 Zq.Zhaopin.CoM/moment/85940324 Zq.Zhaopin.CoM/moment/85940326 Zq.Zhaopin.CoM/moment/85940328 Zq.Zhaopin.CoM/moment/85940334 Zq.Zhaopin.CoM/moment/85940339 Zq.Zhaopin.CoM/moment/85940340 Zq.Zhaopin.CoM/moment/85940344 Zq.Zhaopin.CoM/moment/85940350 Zq.Zhaopin.CoM/moment/85940349 Zq.Zhaopin.CoM/moment/85940358 Zq.Zhaopin.CoM/moment/85940393 Zq.Zhaopin.CoM/moment/85940367 Zq.Zhaopin.CoM/moment/85940383 Zq.Zhaopin.CoM/moment/85940384 Zq.Zhaopin.CoM/moment/85940386 Zq.Zhaopin.CoM/moment/85940392 Zq.Zhaopin.CoM/moment/85940390 Zq.Zhaopin.CoM/moment/85940394 Zq.Zhaopin.CoM/moment/85940397 Zq.Zhaopin.CoM/moment/85940398 Zq.Zhaopin.CoM/moment/85940399 Zq.Zhaopin.CoM/moment/85940414 Zq.Zhaopin.CoM/moment/85940401 Zq.Zhaopin.CoM/moment/85940402 Zq.Zhaopin.CoM/moment/85940407 Zq.Zhaopin.CoM/moment/85940410 Zq.Zhaopin.CoM/moment/85940417 Zq.Zhaopin.CoM/moment/85940408 Zq.Zhaopin.CoM/moment/85940412 Zq.Zhaopin.CoM/moment/85940413 Zq.Zhaopin.CoM/moment/85940416 Zq.Zhaopin.CoM/moment/85940422 Zq.Zhaopin.CoM/moment/85940426 Zq.Zhaopin.CoM/moment/85940430 Zq.Zhaopin.CoM/moment/85940432 Zq.Zhaopin.CoM/moment/85940439 Zq.Zhaopin.CoM/moment/85940460 Zq.Zhaopin.CoM/moment/85940471 Zq.Zhaopin.CoM/moment/85940474 Zq.Zhaopin.CoM/moment/85940475 Zq.Zhaopin.CoM/moment/85940480 Zq.Zhaopin.CoM/moment/85940484 Zq.Zhaopin.CoM/moment/85940483 Zq.Zhaopin.CoM/moment/85940486 Zq.Zhaopin.CoM/moment/85940517 Zq.Zhaopin.CoM/moment/85940489 Zq.Zhaopin.CoM/moment/85940496 Zq.Zhaopin.CoM/moment/85940493 Zq.Zhaopin.CoM/moment/85940494 Zq.Zhaopin.CoM/moment/85940502 Zq.Zhaopin.CoM/moment/85940503 Zq.Zhaopin.CoM/moment/85940507 Zq.Zhaopin.CoM/moment/85940511 Zq.Zhaopin.CoM/moment/85940522 Zq.Zhaopin.CoM/moment/85940521 Zq.Zhaopin.CoM/moment/85940514 Zq.Zhaopin.CoM/moment/85940520 Zq.Zhaopin.CoM/moment/85940512 Zq.Zhaopin.CoM/moment/85940516 Zq.Zhaopin.CoM/moment/85940518 Zq.Zhaopin.CoM/moment/85940524 Zq.Zhaopin.CoM/moment/85940529 Zq.Zhaopin.CoM/moment/85940526 Zq.Zhaopin.CoM/moment/85940530 Zq.Zhaopin.CoM/moment/85940525 Zq.Zhaopin.CoM/moment/85940528 Zq.Zhaopin.CoM/moment/85940539 Zq.Zhaopin.CoM/moment/85940535 Zq.Zhaopin.CoM/moment/85940537 Zq.Zhaopin.CoM/moment/85940533 Zq.Zhaopin.CoM/moment/85940532 Zq.Zhaopin.CoM/moment/85940531 Zq.Zhaopin.CoM/moment/85940541 Zq.Zhaopin.CoM/moment/85940543 Zq.Zhaopin.CoM/moment/85940549 Zq.Zhaopin.CoM/moment/85940547 Zq.Zhaopin.CoM/moment/85940556 Zq.Zhaopin.CoM/moment/85940574 Zq.Zhaopin.CoM/moment/85940566 Zq.Zhaopin.CoM/moment/85940568 Zq.Zhaopin.CoM/moment/85940571 Zq.Zhaopin.CoM/moment/85940593 Zq.Zhaopin.CoM/moment/85940582 Zq.Zhaopin.CoM/moment/85940576 Zq.Zhaopin.CoM/moment/85940579 Zq.Zhaopin.CoM/moment/85940584 Zq.Zhaopin.CoM/moment/85940594 Zq.Zhaopin.CoM/moment/85940589 Zq.Zhaopin.CoM/moment/85940596 Zq.Zhaopin.CoM/moment/85940598 Zq.Zhaopin.CoM/moment/85940601 Zq.Zhaopin.CoM/moment/85940602 Zq.Zhaopin.CoM/moment/85940607 Zq.Zhaopin.CoM/moment/85940605 Zq.Zhaopin.CoM/moment/85940613 Zq.Zhaopin.CoM/moment/85940619 Zq.Zhaopin.CoM/moment/85940620 Zq.Zhaopin.CoM/moment/85940629 Zq.Zhaopin.CoM/moment/85940621 Zq.Zhaopin.CoM/moment/85940626 Zq.Zhaopin.CoM/moment/85940636 Zq.Zhaopin.CoM/moment/85940623 Zq.Zhaopin.CoM/moment/85940627 Zq.Zhaopin.CoM/moment/85940634 Zq.Zhaopin.CoM/moment/85940632 Zq.Zhaopin.CoM/moment/85940631 Zq.Zhaopin.CoM/moment/85940647 Zq.Zhaopin.CoM/moment/85940650 Zq.Zhaopin.CoM/moment/85940648 Zq.Zhaopin.CoM/moment/85940654 Zq.Zhaopin.CoM/moment/85940663 Zq.Zhaopin.CoM/moment/85940658 Zq.Zhaopin.CoM/moment/85940661 Zq.Zhaopin.CoM/moment/85940664 Zq.Zhaopin.CoM/moment/85940672 Zq.Zhaopin.CoM/moment/85940670 Zq.Zhaopin.CoM/moment/85940673 Zq.Zhaopin.CoM/moment/85940682 Zq.Zhaopin.CoM/moment/85940692 Zq.Zhaopin.CoM/moment/85940694 Zq.Zhaopin.CoM/moment/85940689 Zq.Zhaopin.CoM/moment/85940687 Zq.Zhaopin.CoM/moment/85940701 Zq.Zhaopin.CoM/moment/85940764 Zq.Zhaopin.CoM/moment/85940714 Zq.Zhaopin.CoM/moment/85940713 Zq.Zhaopin.CoM/moment/85940763 Zq.Zhaopin.CoM/moment/85940767 Zq.Zhaopin.CoM/moment/85940785 Zq.Zhaopin.CoM/moment/85940768 Zq.Zhaopin.CoM/moment/85940761 Zq.Zhaopin.CoM/moment/85940787 Zq.Zhaopin.CoM/moment/85940798 Zq.Zhaopin.CoM/moment/85940799 Zq.Zhaopin.CoM/moment/85940812 Zq.Zhaopin.CoM/moment/85940805 Zq.Zhaopin.CoM/moment/85940809 Zq.Zhaopin.CoM/moment/85940835 Zq.Zhaopin.CoM/moment/85940834 Zq.Zhaopin.CoM/moment/85940845 Zq.Zhaopin.CoM/moment/85940846 Zq.Zhaopin.CoM/moment/85940939 Zq.Zhaopin.CoM/moment/85940936 Zq.Zhaopin.CoM/moment/85940945 Zq.Zhaopin.CoM/moment/85940937 Zq.Zhaopin.CoM/moment/85940941 Zq.Zhaopin.CoM/moment/85940940 Zq.Zhaopin.CoM/moment/85940943 Zq.Zhaopin.CoM/moment/85940938 Zq.Zhaopin.CoM/moment/85940944 Zq.Zhaopin.CoM/moment/85940947 Zq.Zhaopin.CoM/moment/85940948 Zq.Zhaopin.CoM/moment/85940951 Zq.Zhaopin.CoM/moment/85940960 Zq.Zhaopin.CoM/moment/85940956 Zq.Zhaopin.CoM/moment/85940946 Zq.Zhaopin.CoM/moment/85940955 Zq.Zhaopin.CoM/moment/85940963 Zq.Zhaopin.CoM/moment/85940974 Zq.Zhaopin.CoM/moment/85940964 Zq.Zhaopin.CoM/moment/85940969 Zq.Zhaopin.CoM/moment/85940973 Zq.Zhaopin.CoM/moment/85940976 Zq.Zhaopin.CoM/moment/85940983 Zq.Zhaopin.CoM/moment/85940981 Zq.Zhaopin.CoM/moment/85940971 Zq.Zhaopin.CoM/moment/85940985 Zq.Zhaopin.CoM/moment/85940990 Zq.Zhaopin.CoM/moment/85940993 Zq.Zhaopin.CoM/moment/85940988 Zq.Zhaopin.CoM/moment/85940991 Zq.Zhaopin.CoM/moment/85940999 Zq.Zhaopin.CoM/moment/85941002 Zq.Zhaopin.CoM/moment/85941007 Zq.Zhaopin.CoM/moment/85941016 Zq.Zhaopin.CoM/moment/85941004 Zq.Zhaopin.CoM/moment/85941026 Zq.Zhaopin.CoM/moment/85941015 Zq.Zhaopin.CoM/moment/85941013 Zq.Zhaopin.CoM/moment/85941014 Zq.Zhaopin.CoM/moment/85941025 Zq.Zhaopin.CoM/moment/85941040 Zq.Zhaopin.CoM/moment/85941049 Zq.Zhaopin.CoM/moment/85941041 Zq.Zhaopin.CoM/moment/85941050 Zq.Zhaopin.CoM/moment/85941082 Zq.Zhaopin.CoM/moment/85941065 Zq.Zhaopin.CoM/moment/85941076 Zq.Zhaopin.CoM/moment/85941080 Zq.Zhaopin.CoM/moment/85941077 Zq.Zhaopin.CoM/moment/85941075 Zq.Zhaopin.CoM/moment/85941086 Zq.Zhaopin.CoM/moment/85941078 Zq.Zhaopin.CoM/moment/85941094 Zq.Zhaopin.CoM/moment/85941088 Zq.Zhaopin.CoM/moment/85941090 Zq.Zhaopin.CoM/moment/85941095 Zq.Zhaopin.CoM/moment/85941091 Zq.Zhaopin.CoM/moment/85941093 Zq.Zhaopin.CoM/moment/85941097 Zq.Zhaopin.CoM/moment/85941105 Zq.Zhaopin.CoM/moment/85941101 Zq.Zhaopin.CoM/moment/85941111 Zq.Zhaopin.CoM/moment/85941115 Zq.Zhaopin.CoM/moment/85941132 Zq.Zhaopin.CoM/moment/85941117 Zq.Zhaopin.CoM/moment/85941116 Zq.Zhaopin.CoM/moment/85941119 Zq.Zhaopin.CoM/moment/85941118 Zq.Zhaopin.CoM/moment/85941126 Zq.Zhaopin.CoM/moment/85941127 Zq.Zhaopin.CoM/moment/85941129 Zq.Zhaopin.CoM/moment/85941128 Zq.Zhaopin.CoM/moment/85941138 Zq.Zhaopin.CoM/moment/85941137 Zq.Zhaopin.CoM/moment/85941141 Zq.Zhaopin.CoM/moment/85941154 Zq.Zhaopin.CoM/moment/85941152 Zq.Zhaopin.CoM/moment/85941148 Zq.Zhaopin.CoM/moment/85941150 Zq.Zhaopin.CoM/moment/85941151 Zq.Zhaopin.CoM/moment/85941153 Zq.Zhaopin.CoM/moment/85941166 Zq.Zhaopin.CoM/moment/85941172 Zq.Zhaopin.CoM/moment/85941164 Zq.Zhaopin.CoM/moment/85941160 Zq.Zhaopin.CoM/moment/85941162 Zq.Zhaopin.CoM/moment/85941188 Zq.Zhaopin.CoM/moment/85941175 Zq.Zhaopin.CoM/moment/85941171 Zq.Zhaopin.CoM/moment/85941174 Zq.Zhaopin.CoM/moment/85941176 Zq.Zhaopin.CoM/moment/85941177 Zq.Zhaopin.CoM/moment/85941192 Zq.Zhaopin.CoM/moment/85941181 Zq.Zhaopin.CoM/moment/85941184 Zq.Zhaopin.CoM/moment/85941186 Zq.Zhaopin.CoM/moment/85941187 Zq.Zhaopin.CoM/moment/85941185 Zq.Zhaopin.CoM/moment/85941195 Zq.Zhaopin.CoM/moment/85941194 Zq.Zhaopin.CoM/moment/85941196 Zq.Zhaopin.CoM/moment/85941206 Zq.Zhaopin.CoM/moment/85941204 Zq.Zhaopin.CoM/moment/85941208 Zq.Zhaopin.CoM/moment/85941210 Zq.Zhaopin.CoM/moment/85941211 Zq.Zhaopin.CoM/moment/85941207 Zq.Zhaopin.CoM/moment/85941213 Zq.Zhaopin.CoM/moment/85941215 Zq.Zhaopin.CoM/moment/85941218 Zq.Zhaopin.CoM/moment/85941216 Zq.Zhaopin.CoM/moment/85941227 Zq.Zhaopin.CoM/moment/85941221 Zq.Zhaopin.CoM/moment/85941226 Zq.Zhaopin.CoM/moment/85941223 Zq.Zhaopin.CoM/moment/85941225 Zq.Zhaopin.CoM/moment/85941230 Zq.Zhaopin.CoM/moment/85941229 Zq.Zhaopin.CoM/moment/85941237 Zq.Zhaopin.CoM/moment/85941233 Zq.Zhaopin.CoM/moment/85941239 Zq.Zhaopin.CoM/moment/85941240 Zq.Zhaopin.CoM/moment/85941242 Zq.Zhaopin.CoM/moment/85941243 Zq.Zhaopin.CoM/moment/85941244 Zq.Zhaopin.CoM/moment/85941253 Zq.Zhaopin.CoM/moment/85941246 Zq.Zhaopin.CoM/moment/85941255 Zq.Zhaopin.CoM/moment/85941262 Zq.Zhaopin.CoM/moment/85941258 Zq.Zhaopin.CoM/moment/85941261 Zq.Zhaopin.CoM/moment/85941257 Zq.Zhaopin.CoM/moment/85941267 Zq.Zhaopin.CoM/moment/85941269 Zq.Zhaopin.CoM/moment/85941275 Zq.Zhaopin.CoM/moment/85941273 Zq.Zhaopin.CoM/moment/85941276 Zq.Zhaopin.CoM/moment/85941281 Zq.Zhaopin.CoM/moment/85941280 Zq.Zhaopin.CoM/moment/85941292 Zq.Zhaopin.CoM/moment/85941284 Zq.Zhaopin.CoM/moment/85941302 Zq.Zhaopin.CoM/moment/85941305 Zq.Zhaopin.CoM/moment/85941288 Zq.Zhaopin.CoM/moment/85941290 Zq.Zhaopin.CoM/moment/85941289 Zq.Zhaopin.CoM/moment/85941291 Zq.Zhaopin.CoM/moment/85941309 Zq.Zhaopin.CoM/moment/85941314 Zq.Zhaopin.CoM/moment/85941310 Zq.Zhaopin.CoM/moment/85941312 Zq.Zhaopin.CoM/moment/85941319 Zq.Zhaopin.CoM/moment/85941321 Zq.Zhaopin.CoM/moment/85941325 Zq.Zhaopin.CoM/moment/85941339 Zq.Zhaopin.CoM/moment/85941333 Zq.Zhaopin.CoM/moment/85941335 Zq.Zhaopin.CoM/moment/85941338 Zq.Zhaopin.CoM/moment/85941343 Zq.Zhaopin.CoM/moment/85941347 Zq.Zhaopin.CoM/moment/85941358 Zq.Zhaopin.CoM/moment/85941351 Zq.Zhaopin.CoM/moment/85941355 Zq.Zhaopin.CoM/moment/85941361 Zq.Zhaopin.CoM/moment/85941354 Zq.Zhaopin.CoM/moment/85941368 Zq.Zhaopin.CoM/moment/85941357 Zq.Zhaopin.CoM/moment/85941391 Zq.Zhaopin.CoM/moment/85941366 Zq.Zhaopin.CoM/moment/85941369 Zq.Zhaopin.CoM/moment/85941372 Zq.Zhaopin.CoM/moment/85941376 Zq.Zhaopin.CoM/moment/85941373 Zq.Zhaopin.CoM/moment/85941375 Zq.Zhaopin.CoM/moment/85941374 Zq.Zhaopin.CoM/moment/85941385 Zq.Zhaopin.CoM/moment/85941381 Zq.Zhaopin.CoM/moment/85941390 Zq.Zhaopin.CoM/moment/85941386 Zq.Zhaopin.CoM/moment/85941384 Zq.Zhaopin.CoM/moment/85941387 Zq.Zhaopin.CoM/moment/85941389 Zq.Zhaopin.CoM/moment/85941394 Zq.Zhaopin.CoM/moment/85941409 Zq.Zhaopin.CoM/moment/85941398 Zq.Zhaopin.CoM/moment/85941400 Zq.Zhaopin.CoM/moment/85941401 Zq.Zhaopin.CoM/moment/85941403 Zq.Zhaopin.CoM/moment/85941408 Zq.Zhaopin.CoM/moment/85941414 Zq.Zhaopin.CoM/moment/85941423 Zq.Zhaopin.CoM/moment/85941422 Zq.Zhaopin.CoM/moment/85941426 Zq.Zhaopin.CoM/moment/85941425 Zq.Zhaopin.CoM/moment/85941428 Zq.Zhaopin.CoM/moment/85941432 Zq.Zhaopin.CoM/moment/85941438 Zq.Zhaopin.CoM/moment/85941439 Zq.Zhaopin.CoM/moment/85941440 Zq.Zhaopin.CoM/moment/85941458 Zq.Zhaopin.CoM/moment/85941482 Zq.Zhaopin.CoM/moment/85941444 Zq.Zhaopin.CoM/moment/85941442 Zq.Zhaopin.CoM/moment/85941446 Zq.Zhaopin.CoM/moment/85941445 Zq.Zhaopin.CoM/moment/85941455 Zq.Zhaopin.CoM/moment/85941448 Zq.Zhaopin.CoM/moment/85941456 Zq.Zhaopin.CoM/moment/85941473 Zq.Zhaopin.CoM/moment/85941470 Zq.Zhaopin.CoM/moment/85941472 Zq.Zhaopin.CoM/moment/85941474 Zq.Zhaopin.CoM/moment/85941481 Zq.Zhaopin.CoM/moment/85941480 Zq.Zhaopin.CoM/moment/85941487 Zq.Zhaopin.CoM/moment/85941483 Zq.Zhaopin.CoM/moment/85941484 Zq.Zhaopin.CoM/moment/85941485 Zq.Zhaopin.CoM/moment/85941495 Zq.Zhaopin.CoM/moment/85941493 Zq.Zhaopin.CoM/moment/85941501 Zq.Zhaopin.CoM/moment/85941497 Zq.Zhaopin.CoM/moment/85941494 Zq.Zhaopin.CoM/moment/85941496 Zq.Zhaopin.CoM/moment/85941506 Zq.Zhaopin.CoM/moment/85941505 Zq.Zhaopin.CoM/moment/85941507 Zq.Zhaopin.CoM/moment/85941515 Zq.Zhaopin.CoM/moment/85941522 Zq.Zhaopin.CoM/moment/85941533 Zq.Zhaopin.CoM/moment/85941526 Zq.Zhaopin.CoM/moment/85941537 Zq.Zhaopin.CoM/moment/85941535 Zq.Zhaopin.CoM/moment/85941549 Zq.Zhaopin.CoM/moment/85941541 Zq.Zhaopin.CoM/moment/85941539 Zq.Zhaopin.CoM/moment/85941544 Zq.Zhaopin.CoM/moment/85941546 Zq.Zhaopin.CoM/moment/85941553 Zq.Zhaopin.CoM/moment/85941557 Zq.Zhaopin.CoM/moment/85941556 Zq.Zhaopin.CoM/moment/85941555 Zq.Zhaopin.CoM/moment/85941558 Zq.Zhaopin.CoM/moment/85941595 Zq.Zhaopin.CoM/moment/85941592 Zq.Zhaopin.CoM/moment/85941617 Zq.Zhaopin.CoM/moment/85941594 Zq.Zhaopin.CoM/moment/85941597 Zq.Zhaopin.CoM/moment/85941600 Zq.Zhaopin.CoM/moment/85941593 Zq.Zhaopin.CoM/moment/85941599 Zq.Zhaopin.CoM/moment/85941603 Zq.Zhaopin.CoM/moment/85941601 Zq.Zhaopin.CoM/moment/85941604 Zq.Zhaopin.CoM/moment/85941606 Zq.Zhaopin.CoM/moment/85941605 Zq.Zhaopin.CoM/moment/85941611 Zq.Zhaopin.CoM/moment/85941613 Zq.Zhaopin.CoM/moment/85941615 Zq.Zhaopin.CoM/moment/85941624 Zq.Zhaopin.CoM/moment/85941623 Zq.Zhaopin.CoM/moment/85941622 Zq.Zhaopin.CoM/moment/85941634 Zq.Zhaopin.CoM/moment/85941625 Zq.Zhaopin.CoM/moment/85941627 Zq.Zhaopin.CoM/moment/85941638 Zq.Zhaopin.CoM/moment/85941629 Zq.Zhaopin.CoM/moment/85941632 Zq.Zhaopin.CoM/moment/85941635 Zq.Zhaopin.CoM/moment/85941643 Zq.Zhaopin.CoM/moment/85941649 Zq.Zhaopin.CoM/moment/85941647 Zq.Zhaopin.CoM/moment/85941646 Zq.Zhaopin.CoM/moment/85941652 159134:M 18 Sep 2025 13:47:59.694 * Done loading RDB, keys loaded: 0, keys expired: 0. 159134:M 18 Sep 2025 13:47:59.694 * DB loaded from base file appendonly.aof.1.base.rdb: 0.001 seconds 159134:M 18 Sep 2025 13:47:59.694 * DB loaded from append only file: 0.001 seconds 159134:M 18 Sep 2025 13:47:59.899 * Opening AOF incr file appendonly.aof.1.incr.aof on server start 159134:M 18 Sep 2025 13:47:59.899 * Ready to accept connections tcp

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

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

相关文章

从开发板到工业核心:迅为RK3576的金属外壳,为何是行业应用的“点睛之笔”?

从开发板到工业核心:迅为RK3576的金属外壳,为何是行业应用的“点睛之笔”?从开发板到工业核心:迅为RK3576的金属外壳,为何是行业应用的“点睛之笔”? 在行业产品开发的初期,我们常常面临一个尴尬的境地:花重金…

Transformer 架构中的 ResNet + LayerNorm 设计解析

Transformer 架构中的 ResNet + LayerNorm 设计解析 整体详解 一、Transformer 的核心结构:残差连接与归一化的奠基 Transformer 的成功离不开两大关键组件的协同 ——残差连接(Residual Connection) 与层归一化(L…

【IEEE出版 | EI期刊同步征稿 | 往届已快速成功EI检索】第六届新能源与电气科技国际学术研讨会 (ISNEET 2025)

第六届新能源与电气科技国际学术研讨会(ISNEET 2025)定于2025年12月12日至14日在中国杭州举行。【往届已快速成功EI检索】 【浙江水利水电学院、中国计量大学、西安石油大学主办】 第六届新能源与电气科技国际学术研…

dijkstra——单源最短路径(标准版)

(洛谷):dijkstra——单源最短路径(标准版) #include<bits/stdc++.h> #define int long long using namespace std; typedef pair<int,int> PII; const int N=114514; int n,m; struct Edge{int val,e…

蓝桥杯python基础语法

由于有一定的python基础,对于语法基础部分快速复习,目前复习到循环,这篇博客将总结一些对于我自己来说没有完全掌握好需要反复复习的一些知识点,或者是之前学习没有注意到的知识点。

Acrobat DC 2025安装教程

Acrobat DC 2025安装教程软件介绍Adobe Acrobat 是Adobe公司开发的权威PDF处理工具。它不仅能将各类文档高质量地转换为PDF格式,还提供了强大的编辑、导出与管理功能,确保文件在任何设备上都能完美呈现与流通。安装步…

实用指南:Windows 环境下为银河麒麟(Linux ARM64)生成 node_modules 依赖

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

从数据洞察到财务收益:MyEMS 如何通过 AI 优化调度帮助企业将能效提升转化为真金白银

在 “双碳” 目标深化推进与能源成本持续高企的当下,“降本增效” 已成为企业生存与发展的核心命题。然而,多数企业在能效管理中仍面临 “数据孤岛难打通、调度决策靠经验、能效提升难落地” 的困境 —— 明明知道能…

2025年11月英语学习软件推荐:从零基础到流利口语,最好的学英语软件全攻略

2025年11月英语学习软件推荐:从零基础到流利口语,最好的学英语软件全攻略在探索英语学习的道路上,选择合适的英语学习软件工具往往能让我们事半功倍。面对市场上琳琅满目的英语学习应用,许多英语爱好者都希望找到既…

RAG项目实战:基于图文PDF的多模态问答RAG项目(二)之向量库建设

在完成上面的文档解析和chunk之后,需要做的工作是存储入库。 1. 是什么存储入库的?# json [{"id": "艾力斯-公司深度报告商业化成绩显著产品矩阵持续拓宽-25070718页_page_0","content&quo…

【SAE出版|EI检索|北京航天航空大学主办】第六届应用力学与机械工程国际学术会议(ICAMME 2025)

ICAMME 已经成功举办5届,第六届应用力学与机械工程国际学术会议(ICAMME 2025)将由北京航空航天大学主办,于2025年12月12-14日在中国北京市召开。【SAE出版 | 高录用 | 快见刊 | EI稳检索】 【EI检索快且稳定,预计…

高频电流探头频率响应特性及其影响因素深度分析

高频电流探头频率响应受磁芯、绕组和信号调理影响,需优化以提升测量精度与可靠性。高频电流探头是现代电力电子和高速数字系统调试中不可或缺的关键工具。其频率响应特性直接决定了测量结果的准确性和可靠性。本文将系…

C++ 基础学习总结:从入门到构建核心认知 - 实践

C++ 基础学习总结:从入门到构建核心认知 - 实践2025-11-26 13:35 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

题解:P14598 [COCI 2025/2026 #2] 搭塔 / Tornjevi

题目大意 原题链接:https://www.luogu.com.cn/problem/P14598 题解:https://www.luogu.com.cn/article/f8ame8nw 给你一个 01 序列,然后对于一个点,它只能从前面选一个与它不同的点连接。问最少有几条链在一个区间…

2025英语自学软件推荐:AI时代,用这些工具让你的学习效率翻倍

2025英语自学软件推荐:AI时代,用这些工具让你的学习效率翻倍在英语自学的道路上,选择合适的英语自学软件如同找到了一位随时陪伴的良师益友。面对众多学习应用,如何找到真正适合独立学习的工具,成为许多自学者的首…

2025 年 11 月工时管理系统/软件实力推荐榜:高效工时管理软件,智能工时统计系统,企业工时管理平台精选与深度解析

2025 年 11 月工时管理系统/软件实力推荐榜:高效工时管理软件,智能工时统计系统,企业工时管理平台精选与深度解析 行业背景与发展趋势 随着数字化转型的深入发展,工时管理已成为企业精细化运营的核心环节。现代工时…

Google推出适用于Go的Agent开发工具包 - 公众号

本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!🚀 魔都架构师 | 全网30W技术追随者 🔧 大厂分布式系统/数据中台实战专家 🏆 主导交易系统百万级流量调优 & 车联网平台架构 🧠 AIGC应用…

2025年质量好的大冰花钛杯厂家推荐及选择指南

2025年质量好的大冰花钛杯厂家推荐及选择指南行业背景与市场趋势随着消费者健康意识的提升和消费升级趋势的持续,钛制水杯市场近年来呈现爆发式增长。根据中国轻工业协会2024年发布的《中国杯壶行业发展白皮书》,202…

2025年评价高的化工厂清淤机器人高评价厂家推荐榜

2025年评价高的化工厂清淤机器人高评价厂家推荐榜行业背景与市场趋势随着我国化工行业的快速发展,环保要求日益严格,化工厂清淤作业正面临着效率与安全的双重挑战。据中国环保产业协会2024年数据显示,我国工业清淤市…