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

Redis 安装部署[主从、哨兵、集群](windows版)

说明:该方式建议仅用于自己研究,不建议用于生产

linux 版本见:Redis 安装部署[主从、哨兵、集群](linux版)


一、Redis 下载安装

下载

  • 下载地址:https://github.com/zkteco-home/redis-windows/releases?page=1
  • 选择版本:redis-windows-7.4.0
  • 安装包名称:redis-windows-7.4.0.zip
  • 说明:以下内容基于redis-windows-7.4.0版本,且均已验证通过。特别注意,redis-windows-6.2.6.4版本存在问题,集群场景的搭建没有验证通过。

安装

  • 目录:创建目录 D:\software\redis
  • 解压:将 redis-windows-7.4.0.zip 解压到目录 D:\software\redis\
  • 安装:
    • 添加环境变量:REDIS_HOME=D:\software\redis\redis-windows-7.4.0
    • 添加到path中: 将 %REDIS_HOME% 添加到path环境变量中

二、Redis 主从复制 搭建

  • 主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。

  • 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。

  • 缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

  • 以下方案模拟所有节点在同一台服务器上,以端口号进行区分:

  • 1个主节点端口号:6379

  • 2个从节点端口号:6380/6381

1、创建配置目录

# 创建配置目录(下面的脚本都放到该目录,具体目录可自定义)
mkdir D:\software\redis\redis-master-slavecd D:\software\redis\redis-master-slave

2、创建模板配置文件 redis.conf.template

  • 模板配置文件中的占位符:
    • custom_port 自定义端口占位符
    • master_pwd 主节点密码
    • replicaof_master_ip_port 从节点同步主节点占位符
  • 作为模板,用于快速生成集群模式下节点的配置文件: redis-port.conf
  • 说明:
    • 若有参数需调整,可先修改该模板配置文件的内容,再执行后面的脚本。
    • 重点注意 requirepass 和 maxmemory的配置。
# 修改监听地址
bind 0.0.0.0# 关闭保护模式,默认yes,让redis支持远程连接
protected-mode no# redis监听端口,默认6379
port custom_port# 开启守护进程,以独立进程启动,默认no
daemonize yes# 设置pidfile,默认redis.pid
pidfile redis_custom_port.pid# 日志文件,默认redis.log
logfile "redis_custom_port.log"# 禁用save命令,同步执行有性能问题,推荐使用bgsave
save ""# 设置快照文件名称,默认dump.rdb
dbfilename dump_custom_port.rdb# 设置数据目录,默认./
dir ./# 连接主节点的密码,配置在从节点,默认12345
masterauth 'master_pwd'# 连接Redis服务的redis密码,配置在主节点,默认''
requirepass 'master_pwd' # 设置最大内存,单位kb/mb/gb
maxmemory 256mb# 设置内存淘汰策略,默认noeviction不淘汰数据
# volatile-lru 按照LRU算法逐出原有数据,但仅逐出设置了过期时间的数据
maxmemory-policy volatile-lru# 开启AOF持久化,默认no
appendonly yes# AOF持久化文件名称,默认appendonly.aof
appendfilename "appendonly_custom_port.aof"# 从节点配置 -----------------------------
# 指定要同步的Master节点IP和端口
# replicaof 127.0.0.1 6379
#replicaof_master_ip_port

3、创建生成配置脚本 redis-conf-create.bat

  • 批量复制配置文件并替换占位符的脚本:redis-conf-create.bat
  • 一键批量生成redis集群配置文件,无需手动修改配置文件中的内容,简化操作
rem --------------------------------------------------------------
rem 第一步:基于redis模板配置文件,一键批量生成redis主从节点配置文件
rem --------------------------------------------------------------@echo offrem 设置窗口标题
title redis-conf-createrem 让for循环中的本地变量生效
setlocal enabledelayedexpansionrem master ip和port
set master_ip=127.0.0.1
set master_port=6379
set master_pwd=123456rem 从节点端口列表
set slave_ports=6380 6381rem redis模板配置文件
set redis_conf_tempalte=redis.conf.templaterem redis模板配置文件中的占位符
set old_char=custom_port
set old_master_pwd=master_pwdrem 针对从节点配置,做特殊处理
set old_replicaof=#replicaof_master_ip_port
set new_replicaof=replicaof %master_ip% %master_port%rem 第一步:主节点配置文件生成
echo 生成master节点配置文件============
set master_dest_filename=%master_port%\redis-%master_port%.conf
if not exist %master_port% (mkdir %master_port%echo Folder created successfully: %master_port%
)if exist "%master_dest_filename%" (echo 配置文件已存在 %master_dest_filename%
)
if not exist "%master_dest_filename%" (echo 复制配置文件 %master_dest_filename%echo -f | xcopy "%redis_conf_tempalte%" "%master_dest_filename%" /Irem 替换redis配置文件中的占位符echo 替换配置文件中的占位符 %master_dest_filename%powershell -Command "(Get-Content '%master_dest_filename%') -replace '%old_char%', '%master_port%' | Set-Content '%master_dest_filename%'"powershell -Command "(Get-Content '%master_dest_filename%') -replace '%old_master_pwd%', '%master_pwd%' | Set-Content '%master_dest_filename%'"
)
echo 生成master节点配置文件============
echo.rem 第二步:从节点配置文件生成
echo 生成slave节点配置文件============
for %%i in (%slave_ports%) do (set new_char=%%iset dest_filename=!new_char!\redis-!new_char!.confif not exist !new_char! (mkdir !new_char!echo Folder created successfully: !new_char!)if exist "!dest_filename!" (echo 配置文件已存在 !dest_filename!)if not exist "!dest_filename!" (echo 复制配置文件 !dest_filename!echo -f | xcopy "%redis_conf_tempalte%" "!dest_filename!" /Irem 替换redis配置文件中的占位符echo 替换配置文件中的占位符 !dest_filename!powershell -Command "(Get-Content '!dest_filename!') -replace '%old_char%', '!new_char!' | Set-Content '!dest_filename!'"powershell -Command "(Get-Content '!dest_filename!') -replace '%old_master_pwd%', '%master_pwd%' | Set-Content '!dest_filename!'"powershell -Command "(Get-Content '!dest_filename!') -replace '%old_replicaof%', '!new_replicaof!' | Set-Content '!dest_filename!'")echo.
)
echo 生成slave节点配置文件============endlocal
pause>nul

4、创建启动节点脚本 redis-node-start.bat

执行如下脚本前,请先设置redis环境变量,以便下面的命令可正常执行。

rem --------------------------------------------------------------
rem 第二步:批量启动redis所有节点
rem --------------------------------------------------------------@echo offrem 设置窗口标题
title redis-node-startrem 让for循环中的本地变量生效
setlocal enabledelayedexpansionset curr_path=%CD%rem 主节点端口
set master_port=6379rem 从节点端口列表
set slave_ports=6380 6381rem 第一步:启动master节点
echo redis-%master_port% startcd %curr_path%\%master_port%
start "redis-%master_port%" redis-server redis-%master_port%.confecho redis-%master_port% end
echo.rem 第二步:启动slave节点
for %%i in (%slave_ports%) do (set new_char=%%iecho redis-!new_char! startcd %curr_path%\!new_char!rem 异步执行start "redis-!new_char!" redis-server redis-!new_char!.confecho redis-!new_char! endecho.
)pause>nul

5、执行控制脚本

  • 按顺序执行如下命令,搭建Redis 主从
# 1、批量生成redis配置文件
redis-conf-create.bat# 2、批量启动redis节点
redis-node-start.bat

6、测试命令

# 查看主从复制信息
redis-cli -h 127.0.0.1 -p 6379 -a 123456 info replication# 验证主从复制# 登录主节点
redis-cli -h 127.0.0.1 -p 6379 -a 123456keys *set name 123get name# 登录从节点
redis-cli -h 127.0.0.1 -p 6380 -a 123456keys *

三、Redis Sentinel 搭建

注意: 新版本redis自带哨兵,不需要单独安装

  • 在上面主从复制模式的基础上,新增sentinel哨兵的能力。
  • Redis Sentinel是Redis官方提供的高可用性解决方案,主要用于监控和管理Redis服务器,确保在主服务器发生故障时能够自动进行故障转移,从而保证服务的连续性和高可用性。

1、创建配置目录

# 创建配置目录(下面的脚本都放到该目录,具体目录可自定义)
mkdir /home/middleware/redis/redis-sentinelcd /home/middleware/redis/redis-sentinel

2、创建模板配置文件 sentinel.conf.template

  • 模板配置文件中的占位符:
    • custom_port 自定义端口占位符
# 关闭保护模式,让redis支持远程连接
protected-mode no# 端口,默认26379
port custom_port# 指定sentinel为后台启动
daemonize yes# 设置pidfile,默认redis-sentinel.pid
pidfile sentinel_custom_port.pid# 日志存放路径
logfile "sentinel_custom_port.log"# 指定数据存放路径
dir ./# 配置监听主服务器
# mymaster:自定义redis主节点名称,在一个sentinel网络中,一个redis主节点只能有一个名称
# 172.19.223.161:表示主节点ip
# 6379:表示主节点port
# 2:表示至少需要2个哨兵认为主节点不可⽤时,才会进⾏failover操作
sentinel monitor mymaster master_ip master_port 2# 配置服务密码
# mymaster:redis主节点名称(与上一致);
# 123456:redis主节点和从节点的密码
sentinel auth-pass mymaster master_pwd# 判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 30000# 故障转移的最大超时时间为180000(180秒)
sentinel failover-timeout mymaster 180000

3、创建生成配置脚本 redis-sentinel-conf-create.bat

rem --------------------------------------------------------------
rem  第一步:生成sentinel配置文件
rem  注意:每个sentinel节点所在机器都需要执行一次
rem --------------------------------------------------------------@echo offrem 设置窗口标题
title redis-sentinel-conf-createrem 让for循环中的本地变量生效
setlocal enabledelayedexpansionrem master ip和port
set master_ip=127.0.0.1
set master_port=6379
set master_pwd=123456rem 一台机器上启动的sentinel的端口列表
set sentinel_ports=26379 26380 26381rem 模板配置文件
set sentinel_conf_tempalte=sentinel.conf.templaterem 模板配置文件中的占位符
set old_char=custom_portrem 主节点占位符
set old_master_ip="master_ip"
set old_master_port="master_port"
set old_master_pwd="master_pwd"for %%i in (%sentinel_ports%) do (set new_char=%%iset dest_filename=!new_char!\sentinel-!new_char!.confif not exist !new_char! (mkdir !new_char!echo Folder created successfully: !new_char!)if exist "!dest_filename!" (echo 配置文件已存在 !dest_filename!)if not exist "!dest_filename!" (echo 复制配置文件 !dest_filename!echo -f | xcopy "%sentinel_conf_tempalte%" "!dest_filename!" /Irem 替换redis配置文件中的占位符echo 替换配置文件中的占位符 !dest_filename!powershell -Command "(Get-Content '!dest_filename!') -replace '%old_char%', '!new_char!' | Set-Content '!dest_filename!'"powershell -Command "(Get-Content '!dest_filename!') -replace '%old_master_ip%', '%master_ip%' | Set-Content '!dest_filename!'"powershell -Command "(Get-Content '!dest_filename!') -replace '%old_master_port%', '%master_port%' | Set-Content '!dest_filename!'"powershell -Command "(Get-Content '!dest_filename!') -replace '%old_master_pwd%', '%master_pwd%' | Set-Content '!dest_filename!'")echo.
)endlocal
pause>nul

3、创建启动节点脚本 redis-sentinel-node-start.bat

rem --------------------------------------------------------------
rem 第二步:启动sentinel节点
rem 注意:每个sentinel节点所在机器都需要执行一次
rem --------------------------------------------------------------@echo offrem 设置窗口标题
title redis-sentinel-node-startrem 让for循环中的本地变量生效
setlocal enabledelayedexpansionset curr_path=%CD%rem 一台机器上启动的sentinel的端口列表
set sentinel_ports=26379 26380 26381rem 启动sentinel节点
for %%i in (%sentinel_ports%) do (set new_char=%%iecho sentinel-!new_char! startcd %curr_path%\!new_char!rem 异步执行start "sentinel-!new_char!" redis-server sentinel-!new_char!.conf --sentinelecho sentinel-!new_char! endecho.
)pause>nul

4、执行控制脚本

# 1、生成sentinel配置文件
redis-sentinel-conf-create.bat# 2、启动sentinel节点
redis-sentinel-node-start.bat

5、测试命令

# 第一步:查看:sentinel 信息(主节点为6379)
C:\Users\xxx>redis-cli -h 127.0.0.1 -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3# 第二步:模拟:杀掉主节点 6379(手动关闭窗口)# 第三步:查看:sentinel 信息(主节点为6380,说明已自动切换主节点)
C:\Users\xxx>redis-cli -h 127.0.0.1 -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3# 第四步:查看主从复制信息(6380变为主节点,且只有一个6381的从节点)
C:\Users\xxx>redis-cli -h 127.0.0.1 -p 6380 -a 123456 info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=40503,lag=0
master_failover_state:no-failover
master_replid:7b8267077d407b42af2c8babf1f922fd82f4da8c
master_replid2:7bc6481a52f106bf6bba1b7988871cd54fded59d
master_repl_offset:40503
second_repl_offset:24157
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:40489

四、Redis Cluster 搭建

  • Redis Cluster模式解决了写操作无法负载均衡,以及单机存储限制的问题,实现了较为完善的高可用方案。

  • Redis Cluster模式中集群节点最小配置6个节点(3主3从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。

  • 以下方案模拟所有节点在同一台服务器上,以端口号进行区分:

  • 3个主节点端口号:6001/6002/6003

  • 3个从节点端口号:6004/6005/6006


1、创建配置目录

# 创建集群配置目录(下面的脚本都放到该目录,具体目录可自定义)
mkdir D:\software\redis\redis-clustercd D:\software\redis\redis-cluster

2、创建模板配置文件 redis.cluster.conf.template

  • 模板配置文件中的占位符:custom_port
  • 作为模板,用于快速生成集群模式下节点的配置文件: redis-port.conf
  • 说明:
    • 若有参数需调整,可先修改该模板配置文件的内容,再执行后面的脚本。
    • 重点注意 requirepass 和 maxmemory的配置。
# 注释掉 bind 项,默认监听所有网卡
# bind 127.0.0.1
bind 0.0.0.0# 关闭保护模式,默认yes,让redis支持远程连接
protected-mode no# redis监听端口,默认6379
port custom_port# 开启守护进程,以独立进程启动,默认no
daemonize yes# 设置pidfile,默认redis.pid
pidfile redis_custom_port.pid# 日志文件,默认redis.log
logfile "redis_custom_port.log"# 禁用save命令,同步执行有性能问题,推荐使用bgsave
save ""# 默认yes【设置为no解决window11启动报错EXCEPTION_ACCESS_VIOLATION的问题】
stop-writes-on-bgsave-error no# 设置快照文件名称,默认dump.rdb
dbfilename dump_custom_port.rdb# 设置数据目录,默认./
dir ./# 从节点重新规划周期,默认10
repl-ping-slave-period 10# 连接主节点的密码,配置在从节点,默认12345
masterauth '123456'# 连接Redis服务的redis密码,配置在主节点,默认''
# 集群版建议将各个节点的masterauth和requirepass设置为相同的密码,因为从节点也可能升级为主节点
requirepass '123456'# 设置最大内存,单位kb/mb/gb
maxmemory 256mb# 设置内存淘汰策略,默认noeviction不淘汰数据
# volatile-lru 按照LRU算法逐出原有数据,但仅逐出设置了过期时间的数据
maxmemory-policy allkeys-lru# 开启AOF持久化,默认no
appendonly yes# AOF持久化文件名称,默认appendonly.aof
appendfilename "appendonly_custom_port.aof"# 开启群集功能,默认no
cluster-enabled yes# 群集节点名称文件设置,默认nodes-6379.conf
cluster-config-file nodes_custom_port.conf# 设置群集节点超时时间,默认15000
# 集群中每个节点都会定期向其他节点发送ping消息,接收节点回复pong消息作为响应。
# 如果在cluster-node-timeout时间内通信一直失败,则发送节点会认为接收节点存在故障,把接收节点标记为主观下线(pfail)状态。默认15000,即15s。
cluster-node-timeout 15000# 从节点有效因子,提高集群故障转移能力,默认10
# 每个从节点都要检查最后与主节点断线时间,判断其是否有资格替换故障的主节点。
# 如果从节点与主节点断线时间超过 (cluster-node-timeout * cluster-slave-validity-factor) + repl-ping-slave-period,则当前从节点不具备故障转移资格。
# 例如,如果节点超时时间为30秒,从节点有效因子为10,从节点重新规划周期为10秒,如果从节点与主节点断线时间超过310秒,则当前从节点不会尝试故障转移。
cluster-slave-validity-factor 10# 迁移屏障,提高集群抵抗故障的能力,默认1
# 迁移屏障为1,表示只有当主节点至少保留一个从节点时,从节点才会迁移
# 要禁用迁移,只需将其设置为一个非常大的值。
cluster-migration-barrier 1# 设置集群可用性,默认为yes
# yes 表示所有slot都正常工作,才能对外提供服务
# no  表示部分slot出现问题,其他正常的slot仍然可以继续提供服务
cluster-require-full-coverage yes

3、创建生成配置脚本 redis-cluster-conf-create.bat

  • 批量复制配置文件并替换占位符的脚本:redis-cluster-conf-create.bat
  • 一键批量生成redis集群配置文件,无需手动修改配置文件中的内容,简化操作
rem --------------------------------------------------------------
rem 第一步:基于redis模板配置文件,一键批量生成redis集群中的节点配置文件
rem 作用:无需手动修改redis配置文件中的内容,可简化操作
rem --------------------------------------------------------------@echo offrem 设置窗口标题
title redis-cluster-conf-createrem 让for循环中的本地变量生效
setlocal enabledelayedexpansionrem redis模板配置文件
set redis_conf_tempalte=redis.cluster.conf.template
rem redis模板配置文件中的占位符
set old_char=custom_portrem 遍历1到6,集群节点数
rem 当扩容时,可以增加该遍历值,即可快速生成新节点的redis配置文件
for /L %%i in (1,1,6) do (set new_char=600%%iset dest_filename=!new_char!\redis-!new_char!.confif not exist !new_char! (mkdir !new_char!echo Folder created successfully: !new_char!)if exist "!dest_filename!" (echo 配置文件已存在 !dest_filename!)if not exist "!dest_filename!" (rem 复制redis配置文件到指定目录(不覆盖)echo 复制配置文件 !dest_filename!echo -f | xcopy "%redis_conf_tempalte%" "!dest_filename!" /Irem 替换redis配置文件中的占位符rem 使用PowerShell替换文件中的字符串echo 替换配置文件中的占位符 !dest_filename!powershell -Command "(Get-Content '!dest_filename!') -replace '%old_char%', '!new_char!' | Set-Content '!dest_filename!'")echo.
)endlocal
pause>nul

复制后的配置文件列表如下:

redis-6001.conf
redis-6002.conf
redis-6003.conf
redis-6004.conf
redis-6005.conf
redis-6006.conf

4、创建启动节点脚本 redis-cluster-node-start.bat

执行如下脚本前,请先设置redis环境变量,以便下面的命令可正常执行。

rem --------------------------------------------------------------
rem 第二步:批量启动redis集群的所有节点
rem --------------------------------------------------------------@echo offrem 设置窗口标题
title redis-cluster-node-startrem 让for循环中的本地变量生效
setlocal enabledelayedexpansionset curr_path=%CD%rem 遍历1到6,启动集群节点
for /L %%i in (1,1,6) do (set new_char=600%%iecho redis-!new_char! startecho %curr_path%\!new_char!cd %curr_path%\!new_char!rem 异步执行start "redis-!new_char!" redis-server redis-!new_char!.confecho redis-!new_char! endecho.
)pause>nul

5、创建集群脚本 redis-cluster-create.bat

rem --------------------------------------------------------------
rem 第三步:创建redis集群
rem --------------------------------------------------------------rem 设置窗口标题
title redis-cluster-createrem 启动集群
rem  --cluster create创建集群
rem  --replicas 1 表示每个主节点有1个从节点,这里随机分配主从关系。如果需要定制,则可以不加该参数,使用add-node来定制。
rem 密码 -a 123456
echo yes | redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1 -a 123456pause

检查端口占用:netstat -ano | findstr 6379


6、执行控制脚本

  • 按顺序执行脚本搭建集群
# 1、批量生成redis配置文件
redis-cluster-conf-create.bat# 2、批量启动redis集群节点
redis-cluster-node-start.bat# 3、创建redis集群
redis-cluster-create.bat

7、测试命令

  • 输入如下命令,进行测试
# 测试集群# -c 表示-c(cluster),连接集群时使用,可防止moved和ask异常
# -a 表示-a(auth),redis密码,无需手动auth命令
redis-cli -h 127.0.0.1 -p 6001 -c -a 123456# 查看节点的哈希槽编号范围
cluster slots# 设置name键的值
set name abcd
-> Redirected to slot [5798] located at 127.0.0.1:6002【说明:重定向到了6002】# 查看name键的槽编号(6002)
cluster keyslot name# 查看节点6002上name建是否存在(存在)
redis-cli -h 127.0.0.1 -p 6002 -c -a 123456
keys *# 查看节点6003上name建是否存在(不存在)
redis-cli -h 127.0.0.1 -p 6003 -c -a 123456
keys *# 在节点6003上获取name键的值
get name
-> Redirected to slot [5798] located at 127.0.0.1:6002【说明:重定向到了6002】
"abcd"# 手动关闭节点
redis-cli -h 127.0.0.1 -p 6001 -a 123456 shutdown# 查看redis节点信息
redis-cli -h 127.0.0.1 -p 6001 -a 123456 info# 每1秒打印一次info的过滤信息
# -r 表示将命令循环多少次
# -i 表示每隔几秒执行一次命令
redis-cli -h 127.0.0.1 -p 6001 -a 123456 -r 10 -i 1 info | grep used_memory_human

8、集群操作

  • 集群操作的内容,见:Redis 安装部署[主从、哨兵、集群](linux版)

五、常见错误

问题1:win11 锁屏一段时间后,发现redis集群连接不上

  • redis版本:redis-windows-6.2.6.4
  • 执行命令:redis-cli --cluster info 127.0.0.1:6001 -a 123456
  • 错误信息:[ERR] Node 127.0.0.1:6001 is not configured as a cluster node.
  • 日志文件:redis-6001.log 中的内容如下:
[22196] 14 Dec 16:59:47.610 # IP address for this node updated to 127.0.0.1
[22196] 14 Dec 16:59:52.560 # Cluster state changed: ok
[22196] 14 Dec 17:27:22.757 # New configEpoch set to 8
[22196] 14 Dec 17:27:22.757 # configEpoch updated after importing slot 0
[22196] 16 Dec 09:44:30.844 # Error registering fd event for the new client: No error (conn: fd=3296)
[22196] 16 Dec 09:44:31.934 # Error registering fd event for the new client: No error (conn: fd=3296)
[22196] 16 Dec 09:44:33.013 # Error registering fd event for the new client: No error (conn: fd=3296)
  • 原因分析:
    • 猜测:Redis windows版本,不支持daemonize yes开启守护进程,以独立进程启动。
    • 验证:测试下来是 redis-windows-6.2.6.4 这个版本的问题,升级为 redis-windows-7.4.0 后正常。
  • 解决方案:
    • 临时解决,重启redis节点即可(该版本暂未找到其他好的方式来解决该问题)
    • 长期解决,升级redis到7可解决

问题2:win11 redis集群搭建,从节点replica主节点时,auth授权失败

  • redis版本:redis-windows-6.2.6.4
  • 执行命令:redis-cli --cluster create ip:6001 ip:6002 ip:6003 ip:6004 ip:6005 ip:6006 --cluster-replicas 1
  • 错误日志:从节点的日志内容如下
[24876] 19 Dec 09:55:49.652 # IP address for this node updated to 127.0.0.1
[24876] 19 Dec 09:55:52.635 * Before turning into a replica, using my own master parameters to synthesize a cached master: I may be able to synchronize with the new master with just a partial transfer.
[24876] 19 Dec 09:55:52.635 * Connecting to MASTER 127.0.0.1:6002
[24876] 19 Dec 09:55:52.635 * MASTER <-> REPLICA sync started
[24876] 19 Dec 09:55:52.635 # Cluster state changed: ok
[24876] 19 Dec 09:55:52.636 * Non blocking connect for SYNC fired the event.
[24876] 19 Dec 09:55:52.636 * Master replied to PING, replication can continue...
[24876] 19 Dec 09:55:52.636 # Unable to AUTH to MASTER: -ERR AUTH <password> called without any password configured for the default user. Are you sure your configuration is correct?
  • 原因分析:未设置requirepass密码
  • 解决方案:
    • 设置主库requirepass密码,且设置从库masterauth。Redis集群版本中,从节点可能会升级为主节点,因此将requirepass和masterauth设置为一致。
    • 若不一致,则从节点会报如下错误: Unable to AUTH to MASTER: -WRONGPASS invalid username-password pair or user is disabled.

问题3:win11 redis集群搭建,设置requirepass密码后,主从节点直接挂掉

  • redis版本:redis-windows-6.2.6.4
  • 执行命令:redis-cli --cluster create ip:6001 ip:6002 ip:6003 ip:6004 ip:6005 ip:6006 --cluster-replicas 1 -a 123456
  • 错误日志:主从节点的日志文件中,均报如下错误
[19928] 19 Dec 10:11:49.361 # Redis is starting ......
[19928] 19 Dec 10:11:49.361 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=19928, just started
[19928] 19 Dec 10:11:49.361 # Configuration loaded
[19928] 19 Dec 10:11:49.361 # Windows does not support daemonize. Start Redis as service
[19928] 19 Dec 10:11:49.363 * No cluster configuration found, I'm 3a1b72f13db1dec7142b2a2d3bba91a5ea04c548
[19928] 19 Dec 10:11:49.366 * Running mode=cluster, port=6001.
[19928] 19 Dec 10:11:49.366 # Server initialized
[19928] 19 Dec 10:11:49.366 * Ready to accept connections
[19928] 19 Dec 10:12:00.879 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH
[19928] 19 Dec 10:12:00.970 # IP address for this node updated to 127.0.0.1
[19928] 19 Dec 10:12:02.893 * Replica 127.0.0.1:6004 asks for synchronization
[19928] 19 Dec 10:12:02.893 * Partial resynchronization not accepted: Replication ID mismatch (Replica asked for '6566cfae42b7af906dd400dfa113ae1d5480dc7e', my replication IDs are 'f24a884312d35a426c86619816874cc9dde3466d' and '0000000000000000000000000000000000000000')
[19928] 19 Dec 10:12:02.893 * Replication backlog created, my new replication IDs are '4fe250a0990a1dddb5b4b50f0ac9aef6bc843f14' and '0000000000000000000000000000000000000000'
[19928] 19 Dec 10:12:02.893 * Starting BGSAVE for SYNC with target: disk
[19928] 19 Dec 10:12:02.902 * Background saving started by pid 17572
[19928] 19 Dec 10:12:03.052 # fork operation complete
[19928] 19 Dec 10:12:03.071 * Background saving terminated with success
[19928] 19 Dec 10:12:03.072 * Synchronization with replica 127.0.0.1:6004 succeeded
[19928] 19 Dec 10:12:05.903 # Cluster state changed: ok=== REDIS BUG REPORT START: Cut & paste starting from here ===
Redis version: 6.2.6
[19928] 19 Dec 10:12:06.616 # --- EXCEPTION_ACCESS_VIOLATION
[19928] 19 Dec 10:12:06.617 # --- STACK TRACE
redis-server.exe!((null):0)(0x1401B7F30, 0x0014FF60, 0x00000001, 0x0014EBC0)
redis-server.exe!((null):0)(0x0014EBC0, 0x00000001, 0x00000000, 0x00000000)
KERNELBASE.dll!UnhandledExceptionFilter((null):0)(0x0005AF59, 0x7FFB75832BC8, 0x00000000, 0x7FFB756F0F7A)
ntdll.dll!memcpy((null):0)(0x0014EC90, 0x00000000, 0x0014EC48, 0x0014F230)
ntdll.dll!_C_specific_handler((null):0)(0x00000000, 0x0014F190, 0x0014F870, 0x0014F870)
ntdll.dll!_chkstk((null):0)(0x0014F870, 0x7FFB756D0000, 0x7FFB7572AF38, 0x7FFB7585EBF8)
ntdll.dll!RtlFindCharInUnicodeString((null):0)(0x00000000, 0x00000000, 0x7FA60BC001C0, 0x00000000)
ntdll.dll!KiUserExceptionDispatcher((null):0)(0x14004A60B, 0x00499490, 0x00497B60, 0x0000001B)
redis-server.exe!KiUserExceptionDispatcher((null):0)(0x00499490, 0x00497B60, 0x0000001B, 0x00000000)
redis-server.exe!KiUserExceptionDispatcher((null):0)(0x00000001, 0x00000001, 0x00000002, 0x7FA500000001)
redis-server.exe!KiUserExceptionDispatcher((null):0)(0x00000002, 0x0000001B, 0x00000001, 0x00000000)
redis-server.exe!KiUserExceptionDispatcher((null):0)(0x00004DD8, 0x1401B1720, 0x7FA60F400480, 0x00000010)
redis-server.exe!KiUserExceptionDispatcher((null):0)(0x00497B60, 0x00497B60, 0x00499490, 0x00497B60)
redis-server.exe!KiUserExceptionDispatcher((null):0)(0x00000000, 0x00000000, 0x00497B60, 0x00000000)
redis-server.exe!KiUserExceptionDispatcher((null):0)(0x00000000, 0x00000000, 0x00000000, 0x00000000)
KERNEL32.DLL!BaseThreadInitThunk((null):0)(0x00000000, 0x00000000, 0x00000000, 0x00000000)
ntdll.dll!RtlUserThreadStart((null):0)(0x00000000, 0x00000000, 0x00000000, 0x00000000)
ntdll.dll!RtlUserThreadStart((null):0)(0x00000000, 0x00000000, 0x00000000, 0x00000000)
[19928] 19 Dec 10:12:06.617 # --- INFO OUTPUT
# Server
redis_version:6.2.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:164b73bbc4ccd2e9
redis_mode:cluster
os:Windows  
arch_bits:64
multiplexing_api:WinSock_IOCP
atomicvar_api:pthread-mutex
gcc_version:0.0.0
process_id:19928
process_supervised:no
run_id:f956b182ee3d2cd81581e5a10e898e336631026f
tcp_port:6001
server_time_usec:1734574326539367
uptime_in_seconds:17
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:6521078
executable:D:\software\redis\redis-cluster\6001\redis-server
config_file:D:\software\redis\redis-cluster\6001\redis-6001.conf
io_threads_active:0# Clients
connected_clients:0
cluster_connections:10
maxclients:3168
client_recent_max_input_buffer:32
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0# Memory
# ... ...# Persistence
# ... ...# Stats
# ... ...# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6004,state=online,offset=0,lag=3
master_failover_state:no-failover
master_replid:4fe250a0990a1dddb5b4b50f0ac9aef6bc843f14
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0# CPU
used_cpu_sys:0.015625
used_cpu_user:0.000000
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000# Modules# Commandstats
# ... ...# Errorstats
errorstat_NOAUTH:count=1# Cluster
cluster_enabled:1# Keyspace
[19928] 19 Dec 10:12:06.617 # 
=== REDIS BUG REPORT END. Make sure to include from START to END. ===Please report this bug by following the instructions at:https://github.com/zkteco-home/redis-windows/wiki/Submitting-an-IssueSuspect RAM error? Use redis-server --test-memory to verify it.
  • 原因分析:测试下来是 redis-windows-6.2.6.4 这个版本的问题,升级为 redis-windows-7.4.0 后正常。
  • 解决方案:升级redis到7可解决

相关文章:

Redis 安装部署[主从、哨兵、集群](windows版)

说明&#xff1a;该方式建议仅用于自己研究&#xff0c;不建议用于生产 linux 版本见&#xff1a;Redis 安装部署[主从、哨兵、集群]&#xff08;linux版&#xff09; 一、Redis 下载安装 下载 下载地址&#xff1a;https://github.com/zkteco-home/redis-windows/releases?…...

反应力场的生成物、反应路径分析方法

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…...

安卓音频之dumpsys audio

目录 概述 详述 dumpsys audio 1、音频服务生命周期的事件日志 2、音频焦点事件日志 3、音频流音量信息 4、音量组和设备的相关信息 5、铃声模式 6、音频路由 7、其他状态信息 8、播放活动监控信息 9、录音活动记录 10、AudioDeviceBroker 的记录 11、音效&#…...

StableAnimator模型的部署:复旦微软提出可实现高质量和高保真的ID一致性人类视频生成

文章目录 一、项目介绍二、项目部署模型的权重下载提取目标图像的关节点图像&#xff08;这个可以先不看先用官方提供的数据集进行生成&#xff09;提取人脸&#xff08;这个也可以先不看&#xff09;进行图片的生成 三、模型部署报错 一、项目介绍 由复旦、微软、虎牙、CMU的…...

蓝桥杯真题 - 异或和 - 题解

题目链接&#xff1a;https://www.lanqiao.cn/problems/3549/learning/ 个人评价&#xff1a;难度 3 星&#xff08;满星&#xff1a;5&#xff09; 前置知识&#xff1a;树状数组&#xff0c;dfs 序 整体思路 查询以节点 x x x 为根的子树下所有节点异或和&#xff0c;用 …...

【ES6复习笔记】let 和 const 命令(1)

ES6 中的 let 和 const 关键字 1. let 关键字 let 关键字用于声明一个变量&#xff0c;它具有块级作用域&#xff0c;这意味着变量只在声明它的块内有效。与 var 不同&#xff0c;let 不允许在同一作用域内重复声明同一个变量。 2. const 关键字 const 关键字用于声明一个常…...

ReconFusion: 3D Reconstruction with Diffusion Priors 论文解读

目录 一、概述 二、相关工作 1、稀疏视角NeRF 2、用于视角合成的回归模型 3、用于视角合成的生成模型 4、2D扩散用于3D生成 三、ReconFusion 四、实验 一、概述 提出可以利用三张图片生成实景三维重建的方法ReconFusion。并且在合成数据集和多视图数据集上进行训练&…...

企业安装加密软件有什么好处?

加密软件为企业的安全提供了很多便利&#xff0c;从以下几点我们看看比较重要的几个优点&#xff1a; 1、数据保护&#xff1a;企业通常拥有大量的商业机密、客户数据、技术文档等敏感信息。加密软件可以对这些信息进行加密处理&#xff0c;防止未经授权的人员访问。即使数据被…...

Linux(Centos 7.6)目录结构详解

Linux(Centos 7.6)是一个操作系统&#xff0c;其核心设计理念是将一切资源抽象为文件&#xff0c;即一切皆文件。比如系统中的硬件设备硬盘、网络接口等都被视为文件。Windows系统一般是分为C、D、E盘。而Linux(Centos 7.6)是以斜线"/"作为文件系统的开始目录&#x…...

GXUOJ-算法-第二次作业

1.矩阵连&#xff08;链&#xff09;乘 问题描述 GXUOJ | 矩阵连乘 代码解答 #include<bits/stdc.h> using namespace std;const int N50; int m[N][N]; int p[N]; int n;int main(){cin>>n;//m[i][j] 存储的是从第 i 个矩阵到第 j 个矩阵这一段矩阵链相乘的最小…...

BGP基础配置

使用直连接口IP地址来建立EBGP对等体关系 1、启动BGP协议 [r1]bgp 100 ----启动BGP协议&#xff0c;并且规定其AS号2、配置设备的RID数值&#xff0c;一般选择设备的loopback接口的IP地址 [r1-bgp]router-id 1.1.1.13、配置BGP对等体信息&#xff0c;包含了对等体的IP地址以及…...

瑞芯微全新芯片平台RK3506优势详解,高集成低功耗,为工业而生 触觉智能测评

RK3506是瑞芯微Rockchip在2024年第四季度全新推出的Arm嵌入式芯片平台&#xff0c;三核Cortex-A7单核Cortex-M0多核异构设计&#xff0c;CPU频率达1.5Ghz, M0 MCU为200Mhz。 而RK3506芯片平台下的工业级芯片型号RK3506J&#xff0c;具备-40-85℃的工业宽温性能、发热量小&#…...

Alice与Bob

Alice与Bob factordb.com 用上面链接可以直接分解 得到101999和966233 按照要求让小的放前面大的放后面得到 接着进行MD5的32位小写哈希 MD5在线加密/解密/破解—MD5在线 flag{d450209323a847c8d01c6be47c81811a}...

【玩转MacBook】Git安装

Git 官网也提到了MacBook 可以使用 Homebrew 安装 Git&#xff0c;所以在此使用 Homebrew 安装。 1、安装 Homebrew 执行安装脚本 在 Terminal 中执行如下命令&#xff1a; /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.…...

【IC验证】verilog及systemverilog特殊特性的分析

verilog及systemverilog特殊特性的分析 1.概述2.赋值延迟&#xff08;0&#xff09;总结&#xff08;1&#xff09;情况一&#xff1a;initial中进行阻塞赋值和非阻塞赋值&#xff08;不延迟&#xff09;a代码b 电路图c 结果 &#xff08;2&#xff09;时钟a 代码b 电路图c 结果…...

Apollo中间件技术:从入门到精通

一、引言 在Java开发的微服务架构中&#xff0c;配置管理是一个不可或缺的重要环节。随着服务数量的增加和部署环境的复杂化&#xff0c;传统的手动配置管理方式已难以满足需求。Apollo作为一款开源的分布式配置中心&#xff0c;凭借其强大的功能和灵活的架构&#xff0c;成为…...

汽车行业的MES系统方案(附案例资料合集)

针对汽车行业的MES系统方案&#xff0c;以下是一些关键点和实施案例&#xff1a; 核心功能&#xff1a; 实时监控&#xff1a;MES系统通过传感器和物联网技术实时监控生产线上的每一个环节&#xff0c;确保信息的及时传递。数据分析&#xff1a;系统对收集的数据进行深度分析&a…...

Python入门:7.Pythond的内置容器

引言 Python 提供了强大的内置容器&#xff08;container&#xff09;类型&#xff0c;用于存储和操作数据。容器是 Python 数据结构的核心部分&#xff0c;理解它们对于写出高效、可读的代码至关重要。在这篇博客中&#xff0c;我们将详细介绍 Python 的五种主要内置容器&…...

单片机与MQTT协议

MQTT 协议简述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布 / 订阅&#xff08;publish/subscribe&#xff09;模式的 “轻量级” 通讯协议&#xff0c;该协议构建于 TCP/IP 协议上&#xf…...

记录命令行操作树莓派Wifi的方式

打开WiFi rfkill unblock wlan 关闭WiFi rfkill block wlan 设置可连接的WiFi 方法一&#xff08;bullseye及以前版本才可用&#xff0c;bookworm版本&#xff09; sudo nano /etc/wpa_supplicant/wpa_supplicant.conf network{ssid"wifi_name"psk"wifi_pas…...

Docker 安装mysql ,redis,nacos

一、Mysql 一、Docker安装Mysql 1、启动Docker 启动&#xff1a;sudo systemctl start dockerservice docker start 停止&#xff1a;systemctl stop docker 重启&#xff1a;systemctl restart docker 2、查询mysql docker search mysql 3、安装mysql 3.1.默认拉取最新版…...

[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)

文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步&#xff1a;计算 (a*c) (-b*d)i2.1.4 第2步&#xff1a;计算 (a*d) (b*c)i2.1.5 第3步&#xff1a;计算结果合并 2.2 算法实现&#xff08;UseVectors&#xff09;2.…...

curl 放弃对 Hyper Rust HTTP 后端的支持

curl 放弃了对使用 Rust 编写 Hyper HTTP 后端的支持&#xff0c;因为用户和开发者对此功能的需求很少。 curl 创始人兼核心开发者 Daniel Stenberg 表示&#xff0c;尽管这项工作最初由 ISRG 赞助并且看起来很有希望&#xff0c;但 Hyper 支持多年来一直处于实验阶段&#xf…...

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中&#xff0c;选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片&#xff0c;凭借其卓越的能效比、多功能扩展性和优秀的实时性能&#xff0c;已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…...

RBAC权限控制

1、Spring Security 是一个功能强大的Java安全框架&#xff0c;它提供了全面的安全认证和授权的支持。 2 SpringSecurity配置类&#xff08;源码逐行解析&#xff09; Spring Security的配置类是实现安全控制的核心部分 开启Spring Security各种功能&#xff0c;以确保Web应…...

Linux高并发服务器开发 第六天(rwx 对于目录和文件的区别 gcc编译器 动态库静态库)

目录 1.rwx 对于目录和文件的区别 2.gcc 编译器 2.1编译过程 2.2gcc 的其他参数 3.动态库和静态库 3.1函数库 1.rwx 对于目录和文件的区别 r 文件的内容可以被查看。支持cat、more、head...vim &#xff1b;目录的内容可以被查看。ls、tree …...

如何使用远程控制工具管理你的计算机系统

在现代工作环境中&#xff0c;远程控制技术越来越重要&#xff0c;尤其是对于系统管理员、技术支持人员以及需要远程工作的人来说。远程控制不仅仅是便捷&#xff0c;更是提高工作效率、快速解决问题的重要手段。今天&#xff0c;我们将讨论一些常见的远程控制工具&#xff0c;…...

在K8S中,CNI有什么作用?

在kubernetes中&#xff0c;Container Network Interface(CNI)起着至关重要的作用&#xff0c;主要解决了容器网络配置及通信的问题&#xff0c;确保了Pod间网络连通性及其外部世界的通信。CNI的具体作用包括但不限于以下几个方面。 1. 网络配置自动化&#xff1a; 当kuberne…...

C语言性能优化:从基础到高级的全面指南

引言 C 语言以其高效、灵活和功能强大而著称&#xff0c;被广泛应用于系统编程、嵌入式开发、游戏开发等领域。然而&#xff0c;要写出高性能的 C 语言代码&#xff0c;需要对 C 语言的特性和底层硬件有深入的了解。本文将详细介绍 C 语言性能优化的背后技术&#xff0c;并通过…...

JS中Symbol (符号)数据类型详解和应用场景

JavaScript中Symbol数据类型详解 Symbol是ES6引入的一种原始数据类型&#xff0c;表示唯一的标识符。它是通过Symbol()函数生成的&#xff0c;每次调用都会返回一个独一无二的值。Symbol值的主要用途是为对象的属性提供唯一标识&#xff0c;以避免属性名冲突。 特点 唯一性 每…...

Go gin框架(详细版)

目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go?改动的地方 index.html?改动的地方 style.css?改…...

Linux系统 —— 进程控制系列 - 进程的等待:wait 与 waitpid

目录 1. 进程的等待 1.1 为什么需要等待 2. 进程等待的方法 1. wait 2. waitpid 3. 获取子进程status 4. 阻塞与非阻塞等待 续接前文&#xff1a; Linux系统 —— 进程控制系列 - 进程的创建与终止 &#xff1a;fork与exit-CSDN博客https://blog.csdn.net/hedhjd/artic…...

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

描述&#xff1a;在blender中合并的模型导出为glb&#xff0c;在threejs中导入仍显示多个mesh&#xff0c;并不是统一的整体&#xff0c;导致需要整体高亮或者使用DragControls等不能统一控制。 原因&#xff1a;模型有多个材质&#xff0c;在blender中合并的时候&#xff0c;…...

探索多模态大语言模型(MLLMs)的推理能力

探索多模态大语言模型&#xff08;MLLMs&#xff09;的推理能力 Multimodal Large Language Models (MLLMs) flyfish 原文&#xff1a;Exploring the Reasoning Abilities of Multimodal Large Language Models (MLLMs): A Comprehensive Survey on Emerging Trends in Mult…...

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

wireshark 下载链接&#xff1a;https://pan.quark.cn/s/eab7f1e963be 提取码&#xff1a;rRAg 链接失效&#xff08;可能会被官方和谐&#xff09;可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中&#xff0c;在wireshark…...

单片机实物成品-007 汽车防盗系统(代码+硬件+论文)

汽车尾气监测系统&#xff08;温度震动传感器 红外热释电GPS三个指示灯蜂鸣器正常模式防盗模式wifi传输控制送APP源码 &#xff09; 把该系统划分为两个不同设计主体&#xff0c;一方面为硬件控制主体&#xff0c;通过C语言来编码实现&#xff0c;以STM32开发板为核心控制器&a…...

redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线

文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…...

windows系统下使用cd命令切换到D盘的方法

windows系统下使用cd命令切换到D盘的方法 系统环境配置 win10系统原装C盘后期自己安装的硬盘D盘 python3.8安装在D盘中 问题说明 winR打开终端&#xff0c;使用 cd d:命令&#xff0c;无法将当前目录切换到D盘 解决方法 方法一&#xff1a;使用下面这条命令 cd /d d:运…...

word参考文献第二行缩进对齐

刚添加完参考文献的格式是这样&#xff1a; ”段落“—>缩进修改、取消孤行控制 就可以变成...

Springboot关于格式化记录

日期格式化 返回前端日期需要格式化 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.2</version> </dependency>JsonFormat(pattern "yyyy-MM-dd…...

1.business english--build rapport

build rapport with someone 建立融洽关系 Salespeople often try to build rapport with customers to boost sales. user a variety of appropriate questions. answer the question according to your experience. Do you know how to make a good connection with others…...

发明专利与实用新型专利申请过程及自助与代办方式对比

申请专利&#xff08;发明专利、实用新型专利、外观设计专利&#xff09;有两种方式&#xff1a;1、自己直接向国家知识产权局申请。2、通过专利代办处申请。以下是对这两种专利类型&#xff08;发明专利、实用新型专利&#xff09;申请过程及两种申请方式的详细介绍和对比,参考…...

设计模式-创建型-工厂方法模式

什么是工厂方法模式&#xff1f; 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是 创建型设计模式之一&#xff0c;目的是通过定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪个类。简而言之&#xff0c;工厂方法模式通过延迟对象的创建过程到子类来…...

如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?

目录 1.创新性与学术贡献的超级加分✔ 2.科研过程中的各个环节—从0到1✔ 3.创新性与理论深度的完美结合✔ 4.论证与写作的清晰性✔ 5.数据整理和文献回顾——效率与精准并存✔ 6.创新性要求辅助✔ 总结 宝子们&#xff0c;学术论文写作的旅程是不是感觉像是走进了迷雾森…...

Linux驱动开发--字符设备驱动开发

一、概述 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI, LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。 Linux 应用程序对驱动程…...

Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON

这里是Themberfue 在学习完简单的网络编程后&#xff0c;我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时&#xff0c;我们通过一个线程处理连接的申请&#xff0c;随后通过多线程或者线程…...

828华为云征文|使用sysbench对Flexus X实例对mysql进行性能测评

目录 一、Flexus X实例概述 1.1?Flexus X实例 1.2?在mysql方面的优势 二、在服务器上安装MySQL 2.1 在宝塔上安装docker 2.2 使用宝塔安装mysql 2.3 准备测试数据库和数据库表 三、安装sysbench并进行性能测试 3.1 使用yum命令sysbench 3.2?运行?sysbench 并进行…...

数据结构:堆

目录 1.堆的概念 2.堆的结构 3.堆的初始化 4.堆的销毁 5.堆的插入 6.堆的删除 7.判断堆是否为空 1.堆的概念 堆的性质&#xff1a; 堆中某个结点的值总是不大于或不小于其父结点的值&#xff1b; 堆总是一棵完全二叉树。 以下堆的结构默认大堆 &#xff1a; 2.堆的结…...

洪水灾害多智能体分布式模拟示例代码

1. 环境定义&#xff1a;支持灾害动态、地理数据和分布式架构 import numpy as np import random import matplotlib.pyplot as plt# 新疆主要城市及邻接关系 XINJIANG_CITIES {Urumqi: [Changji, Shihezi],Changji: [Urumqi, Shihezi, Turpan],Shihezi: [Urumqi, Changji, K…...

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具&#xff0c;可用于构建知识库&#xff0c;实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库&#xff0c;包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…...