Redis哨兵模式的搭建以及配置参数简介

news2024/9/30 11:49:59

原理

Redis哨兵模式是一种用于在Redis主从复制环境中进行高可用性监控和故障恢复的机制。该模式引入了一个或多个哨兵节点,这些节点负责监控Redis服务器的状态,并在主节点发生故障时切换为新的主节点。

哨兵节点的工作原理如下:
1、哨兵节点通过发送命令来监控Redis服务器的状态。它会定期向主节点和从节点发送PING命令,检查节点是否存活。
2、当主节点发生故障或不可用时,哨兵节点会进行故障检测。它会询问其他哨兵节点是否已经发现了主节点的故障,并尝试达成共识。
3、如果多数哨兵节点都认为主节点故障,那么它们会选举新的主节点。选举的原则是选择一个具有最高优先级的从节点,如果没有从节点则选择一个具有最高优先级的哨兵节点。
4、一旦新的主节点被选出,哨兵节点会更新所有其他从节点的配置信息,使它们成为新主节点的从节点。
5、当故障的主节点恢复时,哨兵节点会将其重新加入到主从复制环境中,并将其设置为新主节点的从节点。
6、通过哨兵模式,Redis可以实现高可用性和故障恢复。当主节点发生故障时,哨兵节点可以自动切换为新的主节点,使系统可以在故障期间继续提供服务。同时,哨兵节点可以监控并修复其他节点的故障,确保整个Redis集群处于可用状态。
在这里插入图片描述

搭建准备

服务器准备
在这里插入图片描述
关闭所有服务器防火墙

$ systemctl stop firewalld.service

修改所有服务器的hosts

$ vim /etc/hosts

192.168.1.1 redis-01
192.168.1.2 redis-02
192.168.1.3 redis-03

资源准备
redis 下载地址:
http://download.redis.io/releases/

主从搭建

1、在所有服务器执行
注意: 新版本redis自带哨兵,不需要单独安装

$ mkdir /home/redis
$ mkdir /home/redis/data
$ mkdir /home/redis/logs
$ cd /home/redis
$ wget http://download.redis.io/releases/redis-7.2.4.tar.gz
$ tar -zxvf redis-7.2.4.tar.gz
$ cd redis-7.2.4/
$ make

2、配置redis.conf

$ vim /home/redis/redis-7.2.4/redis.conf

主配置

dir "/home/redis/data"
logfile "/home/redis/logs/redis.log"
requirepass "123456"
protected-mode no
port 6379
min-replicas-to-write 1
min-replicas-max-lag 10
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
maxmemory 2gb
maxmemory-policy allkeys-lru
pidfile "/var/run/redis_6379.pid"
loglevel notice
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
locale-collate ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
rdb-del-sync-files no
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-diskless-sync-max-replicas 0
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
list-compress-depth 0
set-max-intset-entries 512
set-max-listpack-entries 128
set-max-listpack-value 64
zset-max-listpack-entries 128
zset-max-listpack-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4kb
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

从配置
1、masterauth: 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。“requirepass”配置项指定了当前server的密码。此配置项中值需要和master机器的“requirepass”保持一致。
2、slaveof : 将当前服务器转变为指定服务器的从属服务器(slave server)。

dir "/home/redis/data"
logfile "/home/redis/logs/redis.log"
requirepass "123456"
masterauth "123456"
protected-mode no
port 6379
min-replicas-to-write 1
min-replicas-max-lag 10
slaveof middleware-01 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
maxmemory 2gb
maxmemory-policy allkeys-lru
pidfile "/var/run/redis_6379.pid"
loglevel notice
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
locale-collate ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
rdb-del-sync-files no
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-diskless-sync-max-replicas 0
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
list-compress-depth 0
set-max-intset-entries 512
set-max-listpack-entries 128
set-max-listpack-value 64
zset-max-listpack-entries 128
zset-max-listpack-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4kb
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

3、启动
依次启动所有服务器上的redis 服务

$ /home/redis/redis-7.2.4/src/redis-server /home/redis/redis-7.2.4/redis.conf

4、查看状态
启动所有服务器后,查看所有redis 节点状态

master节点信息

$ /home/redis/redis-7.2.4/src/redis-cli -a 123456(redis密码) info replication

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:3
min_slaves_good_slaves:3
slave0:ip=192.168.1.2,port=6379,state=online,offset=812674869,lag=0
slave1:ip=192.168.1.3,port=6379,state=online,offset=812674869,lag=0
master_failover_state:no-failover
master_replid:ff565edfdaed8aba6cab1c39f70b8bcab2126c08
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:812674869
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:811607825
repl_backlog_histlen:1067045

slave节点信息

$ src/redis-cli -a 123456(redis密码) info replication

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:redis-01
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:812708923
slave_repl_offset:812708923
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
min_slaves_good_slaves:0
master_failover_state:no-failover
master_replid:ff565edfdaed8aba6cab1c39f70b8bcab2126c08
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:812708923
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:811648705
repl_backlog_histlen:1060219

哨兵配置

在redis的安装目录下有个文件sentinel.conf,这就是哨兵的配置文件。它和redis.conf文件在同级目录。

1、sentinel.conf配置

$ vim /home/redis/redis-7.2.4/sentinel.conf


protected-mode no
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
loglevel notice
logfile "/home/redis/logs/sentinel.log"
dir "/home/redis/data"
sentinel monitor mymaster 192.168.1.1 6379 3
sentinel auth-pass mymaster 123456
# 如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了

# 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
sentinel failover-timeout mymaster 30000
# 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长

# 编写redis节点切换通知,根据实际情况编写
sentinel client-reconfig-script mymaster /home/redis/redis-7.2.4/reconfig.sh

sentinel deny-scripts-reconfig yes
sentinel resolve-hostnames yes
sentinel announce-hostnames yes

2、reconfig.sh 节点切换企业微信发送脚本


#!/bin/bash
  
check_time=$(date +"%F-%T")
master_name="$1"
from_ip="$4"
from_port="$5"
to_ip="$6"
to_port="$7"


#填写自己正确的机器人链接
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=【自己的key】' \
   -H 'Content-Type: application/json' \
   -d '
   {
        "msgtype": "text",
        "text": {
            "content": "【'$check_time' : '$master_name'】 \nmessage : \nredis主节点转移\nfrom : \n'$from_ip:$from_port'\nto: \n'$to_ip:$to_port'",
            "mentioned_list":["@all"]
        }
   }'

3、哨兵启动

$ /home/redis/redis-7.2.4/src/redis-sentinel /home/redis/redis-7.2.4/sentinel.conf

4、查看启动状态

$ /home/redis/redis-7.2.4/src/redis-cli -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=192.168.1.1:6379,slaves=3,sentinels=4

5、注意
redis 哨兵模式启动成功后,会自动在sentinel .conf 最下方生成以下配置

...

# Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
user default on nopass sanitize-payload ~* &* +@all
sentinel myid a98121e7518d18336731dac83e1ef041152590f0
sentinel config-epoch mymaster 219
sentinel leader-epoch mymaster 0
sentinel current-epoch 219


## 不包含自身
sentinel known-replica mymaster 192.168.1.1 6379
sentinel known-replica mymaster 192.168.1.2 6379
sentinel known-replica mymaster 192.168.1.3 6379

## 不包含自身
sentinel known-sentinel mymaster 192.168.1.1 26379 ebf711bac3990a534fc068312b7622c849dc65e5
sentinel known-sentinel mymaster 192.168.1.2 26379 ec8837fb38d22daa9800b82006130fe625d959fd
sentinel known-sentinel mymaster 192.168.1.3 26379 ec8837fb38d22daa9800b82006130fe625d959fd

redis.conf 参数详解

Redis的配置文件redis.conf包含了多个参数,这些参数用于定义Redis服务器的行为、性能和安全设置。以下是一些常见参数的详细说明:

基本设置

  • daemonize:是否以后台进程运行。默认为no,如果设置为yes,则Redis将以守护进程的方式在后台运行。
  • pidfile:当Redis以后台进程运行时,需要指定一个PID文件以存储进程ID。默认为/var/run/redis.pid,但可以通过此参数进行修改。
  • bind:绑定主机IP地址。默认值为127.0.0.1,即只接受来自本地主机的连接。如果设置为0.0.0.0,则接受来自所有IP地址的连接。
  • port:监听端口号。默认为6379,但可以根据需要进行修改。
  • timeout:客户端连接超时时间(秒)。默认为300秒,即如果客户端在指定时间内没有发送任何请求,则服务器将关闭该连接。如果设置为0,则表示禁用此功能。

日志设置

  • loglevel:日志记录等级。有4个可选值:debug、verbose(默认值)、notice、warning。这些等级决定了日志信息的详细程度。
  • logfile:日志记录方式及路径。默认为stdout,即将日志输出到标准输出。如果设置为文件路径,则日志将被写入该文件。

数据库设置

  • databases:可用数据库的数量。默认值为16,但可以根据需要进行修改。数据库编号从0开始,可以使用SELECT命令来选择要使用的数据库。
  • dbfilename:本地数据库文件名。默认为dump.rdb,这是Redis用于存储数据的文件名。
  • dir:本地数据库存放路径。默认为当前目录(即redis.conf所在的目录),但可以通过此参数进行修改。

数据持久化

  • save:指定在多长时间内有多少次更新操作就将数据同步到数据文件。可以配置多个条件,如“save 900 1”表示在900秒内有1次更改时触发数据持久化。
  • rdbcompression:在存储至本地数据库时是否压缩数据。默认为yes,使用LZF压缩算法。如果为了节省CPU时间,可以设置为no,但会导致数据库文件变大。
  • appendonly:是否在每次更新操作后进行日志记录(AOF持久化)。默认为no。如果开启此功能,Redis将在每次写操作时追加日志到指定的文件中,以确保数据的持久性。但需要注意的是,这可能会影响性能。
  • appendfilename:更新日志文件名。默认为appendonly.aof。
  • appendfsync:更新日志条件。有3个可选值:no(等待操作系统进行数据缓存同步到磁盘)、always(每次更新操作后手动调用fsync()将数据写到磁盘)、everysec(每秒同步一次,默认值)。

主从复制

  • slaveof:设置从服务器的主服务器IP地址和端口号。当本机为从服务时,需要指定主服务的IP及端口。
  • masterauth:当本机为从服务时,设置主服务的连接密码。如果主服务器设置了密码保护,则从服务器在连接主服务器时需要进行身份验证。
  • slave-serve-stale-data:当从服务器与主服务器失去联系或复制正在进行时,从服务器的行为设置。如果设置为yes(默认值),从服务器将继续响应客户端请求,但返回的数据可能是过时的。如果设置为no,则除了INFO和SLAVEOF命令之外的任何请求都会返回一个错误信息“SYNC with master in progress”。

安全设置

  • requirepass:设置连接密码。如果配置了连接密码,客户端在连接Redis时需要通过AUTH命令提供密码。

其他设置

  • maxclients:最大客户端连接数。默认不限制,但可以根据服务器的性能和网络环境进行设置。如果达到最大连接数,Redis将关闭新的连接并向客户端返回错误信息。
  • maxmemory:设置Redis使用的最大内存量。当达到最大内存限制时,Redis会尝试清除已到期或即将到期的Key。如果仍然无法释放足够的内存,Redis将无法进行写入操作。
  • tcp-backlog:TCP监听的最大容纳数量。在高并发的环境下,需要把这个值调高以避免客户端连接缓慢的问题。
  • tcp-keepalive:指定ACKs的时间周期(秒)。如果设置为非0值,则表示将周期性地检测客户端是否可用。默认值为0,表示不进行检测。
  • protected-mode:Redis 3.2版本后新增的配置项。默认为yes,即开启保护模式。在保护模式下,如果Redis没有配置密码或绑定IP地址,它将只允许来自本地主机的连接。为了允许外部连接,可以关闭保护模式或配置密码和绑定IP地址。

sentinel.conf 参数详解

sentinel.conf 是 Redis Sentinel 的配置文件,用于定义 Sentinel 的行为、监控的主节点信息、故障转移策略等。以下是对 sentinel.conf 中一些关键参数的详细解释:

基本设置

  • port:Sentinel 实例运行的端口号。每个 Sentinel 实例都需要一个独立的端口号。例如:port 26379。
  • daemonize:是否以守护进程方式运行 Sentinel。默认为 no,如果设置为 yes,则 Sentinel 将在后台运行。
  • logfile:指定 Sentinel 的日志文件路径。如果为空,则日志将输出到标准输出。
  • dir:指定 Sentinel 的工作目录。用于存放 Sentinel 的配置文件、日志文件等。

监控设置

  • sentinel monitor:定义要监控的主节点信息。格式为 sentinel monitor 。其中, 是主节点的名称, 是主节点的 IP 地址, 是主节点的端口号, 是判定主节点最终不可达所需要的票数(即多少个 2、Sentinel 实例认为主节点不可达时,才认为主节点真正不可达)。例如:sentinel monitor mymaster 127.0.0.1 6379 2。
  • sentinel auth-pass:设置连接主节点和从节点的密码。如果主节点和从节点设置了密码保护,则需要通过此参数进行身份验证。格式为 sentinel auth-pass 。

故障转移设置

  • sentinel down-after-milliseconds:定义 Sentinel 认为主节点或从节点不可达的时间阈值(毫秒)。如果在这个时间内没有收到主节点或从节点的响应,则认为该节点不可达。格式为 sentinel down-after-milliseconds 。例如:sentinel down-after-milliseconds mymaster 30000。
  • sentinel parallel-syncs:定义在故障转移期间,可以同时向新主节点发起复制操作的从节点个数。这个值越大,意味着故障转移期间从节点同步新主节点数据的时间总和越长;这个值越小,则意味着在故障转移期间,多个从节点向客户端提供服务时可能仍然使用旧数据。格式为 sentinel parallel-syncs 。例如:sentinel parallel-syncs mymaster 1。
  • sentinel failover-timeout:定义故障转移的超时时间(毫秒)。如果在这个时间内故障转移没有完成,则认为此次故障转移失败。下次对该主节点进行故障转移的时间将是该设置的2倍。格式为 sentinel failover-timeout 。例如:sentinel failover-timeout mymaster 900000。

通知脚本设置

  • sentinel notification-script:定义在故障转移发生时执行的通知脚本。这个脚本可以用来告知系统管理员当前集群的情况。脚本被允许执行的最大时间为60秒,如果超时,脚本将会被终止。脚本执行的结果可以是1(稍后重试,最大重试次数为10)或2(执行结束,无需重试)。格式为 sentinel notification-script 。例如:sentinel notification-script mymaster /var/redis/notify.sh。

其他设置

  • protected-mode:保护模式设置。如果设置为 yes,则 Sentinel 只允许来自本地主机的连接(除非绑定了其他 IP 地址或关闭了保护模式)。默认为 yes。
  • bind:绑定 IP 地址。如果设置了此参数,则 Sentinel 只接受来自这些 IP 地址的连接。

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

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

相关文章

基于SpringBoot的诗词学习网站的设计与实现

目录 毕设制作流程功能和技术介绍系统实现截图开发核心技术介绍:使用说明开发步骤编译运行代码执行流程核心代码部分展示可行性分析软件测试详细视频演示源码获取 毕设制作流程 (1)与指导老师确定系统主要功能; (2&am…

通信工程学习:什么是GOCC地面操作控制中心、SOCC卫星操作控制中心

GOCC地面操作控制中心&SOCC卫星操作控制中心 GOCC(Ground Operation Control Center,地面操作控制中心)和SOCC(Satellite Operations Control Center,卫星操作控制中心)是卫星通信系统中至关重要的组成…

GitHub下载MY-SITE

1、GitHub下载my-site 解压 打开项目 ApiOperation swagger日志的 七牛云-云平台 dao和model统称为pojo--实体类 删除docker 2、创建数据库 执行sql 3、链接数据库 扫描dao曾的包 46、鸡汤分析开源项目_哔哩哔哩_bilibili 修改yaml 启动 http://localhost:8089/a…

如何在 Kubernetes 上部署和配置开源数据集成平台 Airbyte?

在 Kubernetes 上部署和配置 Airbyte 是一个复杂但非常有价值的过程,特别是对于需要强大数据集成和数据处理能力的企业或团队。Airbyte 是一个开源的数据集成平台,允许用户从各种来源提取数据并加载到目标存储中。其强大的插件系统支持多种数据源与目标&…

FPGA实现PCIE视频采集转SDI输出,基于GTX+XDMA中断架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博已有的 SDI 编解码方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存SDI视频编码之-->RGB转BT1120SDI视频编码之-->SMPTE SD/HD…

python5_basecurd

基础增删改查 # 定义一个字典来存储数据 data {}def add(key, value):"""添加数据:param key: 键:param value: 值"""if key not in data:data[key] valueprint(f"添加成功:{key} -> {value}")else:print(f"键已…

【12月IEEE出版* 镇江 】第九届清洁能源与发电技术国际学术会议(CEPGT 2024)

2024 9th International Conference on Clean Energy and Power Generation Technology (CEPGT 2024) 第九届清洁能源与发电技术国际学术会议(CEPGT 2024),将于2024年12月27-29日在江苏镇江举办。高效清洁新能源的研究和应用是我国现阶段最主…

非关键尺寸的失效模式和效应分析(FMEA)是否有必要进行?

在追求极致的过程中,一个看似不起眼的细节——非关键尺寸的失效模式和效应分析(FMEA),却常常被忽视或低估其重要性。本文,深圳天行健企业管理咨询公司旨在分享为何在非关键领域,FMEA同样不可或缺&#xff0…

【LeetCode】动态规划—221. 最大正方形(附完整Python/C++代码)

动态规划—221. 最大正方形 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 前言 在二维矩阵中寻找最大正方形的问题是动…

mysql笔记10(高级部分--跟数据库管理有关)

文章目录 一、视图(view)1. 作用2. CRUD--跟表操作几乎相同① 创建② 显示视图③ 查看视图相关详细信息④ 删除视图⑤ 更新视图 3. 视图算法① 创建视图时指定视图算法② 后期navicat里修改视图算法③ 注 二、事务(transaction)1. 事务的提出2. 举例理解① commit -- 一起执行②…

CSS宽度和高度

CSS 尺寸属性指的就是元素的宽度和高度属性,虽然说非常简单,但却是必须掌握的技能。CSS 中提供了 width、height、max-width、min- width、max-height 和 min-height 等几个属性来设置元素的宽度和高度,这些元素使用起来非常简单,…

采购订单管理:如何驱动业务效率和增长

采购订单是一份具有法律约束力的文件,明确了买方在未来特定日期从供应商处购买商品或服务的意图。 该文件对于买卖双方均具有重要价值。对于买方而言,采购订单有助于其进行未来数月的财务规划,明确资金的支出时间点。对于供应商而言&#x…

如何快速建立自己的异地互联的远程视频监控系统,通过web浏览器可以直接查看公网上的监控视频(上)

目录 一、需求 二、方案 2.1、计划方案 2.2、实施准备 2.2.1所需配置的产品和服务 2.2.1.1云主机 (1)选择云平台 (2)配置云服务器 2.2.2.2视频监控平台软件 (1)视频监控平台软件 (2&am…

袋鼠云数据资产平台:数据模型标准化建表重构升级

数据模型是什么?简单来说,数据模型是用来组织和管理数据的一种方式。它为构建高效且可靠的信息系统提供了基础,不仅决定了如何存储和管理数据,还直接影响系统的性能和可扩展性。 想要建立一个良好的数据模型,设计时需…

【从0开始搭建微服务并进行部署】SpringBoot+dubbo+zookeeper

文章目录 说明环境搭建创建项目父模块设置子模块 dubbo-api子模块 dubbo-provider子模块 dubbo-consumer测试项目 docker部署项目完整项目地址 说明 jdk1.8SpringBoot2.x低版本dubbo:请查看之前教程【微服务】SpringBootDubboZooKeeper 实战 关于本教程将采用jdk1…

springboot整合Freemarker动态生成JSON

什么是Freemarker 链接: Freemarker介绍和语法 FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的&#xff0c…

node实现大文件切片上传的方法

切片上传定义 文件切片上传,也称为分片上传,是一种处理大文件上传的有效方法。该方法通过将大文件分割成多个较小的部分(即切片或分片),然后分别上传这些切片到服务器,最后在服务器上将这些切片合并成原始文…

新手教学系列——用 VSCode 实现高效远程开发

随着软件开发环境日益复杂,远程开发已成为许多开发者的日常工作方式。尤其当项目需要直接在服务器上运行或本地计算资源有限时,能够使用一款便捷、强大的工具至关重要。在众多 IDE 中,VSCode 因其轻量、灵活且支持丰富插件,成为远程开发的理想选择。本文将详细介绍如何通过…

【Vue3】状态仓库持久化

前言 由于 vuex 和 pinia 是将数据存储到内存中的,所以刷新页面后数据会丢失。如果想要持久化存储,就需要将数据同步到 WebStorage。可以使用现有的插件或者自己手写一个插件,本文对二者均有介绍。 其中手写插件案例使用两个简单模块&#…

【PyTorch】图像目标检测

图像目标检测是什么 Object Detection 判断图像中目标的位置 目标检测两要素 分类:分类向量 [p0, …, pn]回归:回归边界框 [x1, y1, x2, y2] 模型如何完成目标检测 将3D张量映射到两个张量 分类张量:shape为 [N, c1]边界框张量&#xf…