Linux部署Redis哨兵集群 一主两从三哨兵(这里使用Redis6,其它版本类似)
目录
- 一、哨兵集群架构介绍
- 二、下载安装Redis
- 2.1、选择需要安装的Redis版本
- 2.2、下载并解压Redis
- 2.3、编译安装Redis
- 三、搭建Redis一主两从集群
- 3.1、准备配置文件
- 3.1.1、准备主节点6379配置文件
- 3.1.2、准备从节点6380配置文件
- 3.1.3、准备从节点6381配置文件
- 3.2、启动Redis主从复制集群
- 3.3、查看Redis集群信息和主从复制效果
- 3.4、关闭Redis
- 四、搭建Redis三哨兵集群
- 4.1、准备配置文件
- 4.1.1、准备节点26379配置文件
- 4.1.2、准备节点26380配置文件
- 4.1.3、准备节点26381配置文件
- 4.2、启动sentinel集群
- 4.3、查看三个哨兵节点信息
- 4.4、测试哨兵容灾切换效果
- 4.5、关闭Redis哨兵
- 五、注意事项
- 5.1、远程连接问题
- 5.2、Redis节点注册到哨兵的IP问题
- 六、SpringBoot集成Redis主从架构实现读写分离(哨兵模式)
一、哨兵集群架构介绍
Redis-Sentinel是redis官方推荐的高可用性解决方案,sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能,而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群, 自动发现master宕机,进行自动切换slave > master,类似Java这类客户端会通过sentinel发现redis主节点并与其建立连接,也可以实现读写分离。

PS:本文使用一台主机部署,会使用不同端口区分。
二、下载安装Redis
2.1、选择需要安装的Redis版本
在官网发行版中选择一个自己需要的版本,我这里使用Redis6.2.0,小版本区别不大。
Redis发行版本列表:https://download.redis.io/releases

2.2、下载并解压Redis
- 下载redis到/usr/local/redis目录中
wget -P /usr/local/redis http://download.redis.io/releases/redis-6.2.0.tar.gz
- 进入/usr/local/redis目录解压redis
cd /usr/local/redis
tar -xzf redis-6.2.0.tar.gz

2.3、编译安装Redis
- 安装gcc
# redis是c语言编写的,编译Redis需要gcc环境
yum -y install gcc
# 安装好后查看gcc信息
gcc -v

- 编译
# 进入redis-6.2.0目录
cd redis-6.2.0
# 执行make开始编译 因为我们下载的是源码需要编译成可执行文件
make

- 安装
# 编译成功后,执行make PREFIX=/usr/local/redis/redis-6.2.0 install 安装redis
# 这里指定目录之后,方便后续卸载,直接rm -rf /usr/local/redis/redis-6.2.0 即可删除redis
make PREFIX=/usr/local/redis/redis-6.2.0 install
PREFIX 这个关键字的作用是安装的时候用于指定程序存放的路径,假设不添加该关键字Linux会将:可执行文件存放在/usr/local/bin目录;库文件会存放在/usr/local/lib目录;配置文件会存放在/usr/local/etc目录;其他的资源文件会存放在usr/local/share目录

三、搭建Redis一主两从集群
本文使用一台主机部署,会使用不同端口区分,主节点6379、从节点分别使用6380和6381。
3.1、准备配置文件
先进入Redis解压目录,后续都在该目录下操作
cd /usr/local/redis/redis-6.2.0
3.1.1、准备主节点6379配置文件
- 创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/node/6379
- 拷贝一份redis.conf到./node/6379目录中作为主节点配置文件。
cp redis.conf ./node/6379/redis.conf
- 修改几个配置
# 编辑拷贝的配置文件,,修改几个配置信息
vi ./node/6379/redis.conf
# 绑定的主机地址,建议填redis安装服务器的业务私网地址
# 这里为了方便直接找到这个配置注释了
#bind 127.0.0.1 -::1# redis进程的端口号 默认是6379
port 6379# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6379.pid# log文件输出位置
logfile /usr/local/redis/redis-6.2.0/node/6379/redis.log# 指定持久化存放目录(默认当前启动时所在目录),因为我这里是一台机器部署的要区分开每个节点持久化文件存放的目录
dir /usr/local/redis/redis-6.2.0/node/6379# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 123456# 当master设置了密码保护时,slave服务连接master的密码
# 主节点中也要配置,如果不配置在主节点宕机后,哨兵选择了其它从节点作为主节点,如果不配置主节点授权密码,那么在这个节点重新加入集群时无法同步新的主节点数据,因为没有主节点授权密码
masterauth 123456
3.1.2、准备从节点6380配置文件
- 创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/node/6380
- 拷贝一份redis.conf到./node/6380目录中作为主节点配置文件。
cp redis.conf ./node/6380/redis.conf
- 修改几个配置
# 编辑拷贝的配置文件,,修改几个配置信息
vi ./node/6380/redis.conf
# 绑定的主机地址,建议填redis安装服务器的业务私网地址
# 这里为了方便直接找到这个配置注释了
#bind 127.0.0.1 -::1# redis进程的端口号 默认是6379
port 6380# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6380.pid# log文件输出位置
logfile /usr/local/redis/redis-6.2.0/node/6380/redis.log# 指定持久化存放目录(默认当前启动时所在目录),因为我这里是一台机器部署的要区分开每个节点持久化文件存放的目录
dir /usr/local/redis/redis-6.2.0/node/6380# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 123456# 当master设置了密码保护时,slave服务连接master的密码
masterauth 123456# 设置主机的 ip+ 端口,来指明主机的redis
replicaof 10.0.20.13 6379# 配置从节点读写权限,支持参数[yes,no],yes:只读 no:支持读写操作,从节点默认yes
replica-read-only yes
3.1.3、准备从节点6381配置文件
- 创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/node/6381
- 拷贝一份redis.conf到./node/6381目录中作为主节点配置文件。
cp redis.conf ./node/6381/redis.conf
- 修改几个配置
# 编辑拷贝的配置文件,,修改几个配置信息
vi ./node/6381/redis.conf
# 绑定的主机地址,建议填redis安装服务器的业务私网地址
# 这里为了方便直接找到这个配置注释了
#bind 127.0.0.1 -::1# redis进程的端口号 默认是6379
port 6381# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6381.pid# log文件输出位置
logfile /usr/local/redis/redis-6.2.0/node/6381/redis.log# 指定持久化存放目录(默认当前启动时所在目录),因为我这里是一台机器部署的要区分开每个节点持久化文件存放的目录
dir /usr/local/redis/redis-6.2.0/node/6381# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 123456# 当master设置了密码保护时,slave服务连接master的密码
masterauth 123456# 设置主机的 ip+ 端口,来指明主机的redis
replicaof 10.0.20.13 6379# 配置从节点读写权限,支持参数[yes,no],yes:只读 no:支持读写操作,从节点默认yes
replica-read-only yes
3.2、启动Redis主从复制集群
- 启动Redis
# 携带配置启动主节点6379
./bin/redis-server ./node/6379/redis.conf# 携带配置启动从节点6380
./bin/redis-server ./node/6380/redis.conf
# 携带配置启动从节点6381
./bin/redis-server ./node/6381/redis.conf
- 查看各节点启动状态
# 查看redis进程,这里可以看到启动了三个进程
# 如果有进程没有启动成功可以去每个节点信息存储目录查看日志,分析异常原因
ps -aux | grep redis

3.3、查看Redis集群信息和主从复制效果
- 1、使用Redis自带redis-cli工具连接主节点查看集群信息
# 使用密码连接本机端口号为6379的redis
./bin/redis-cli -p 6379 -a 123456# 查看集群信息
127.0.0.1:6379> info replication

- 2、在主节点写入数据
127.0.0.1:6379> set names kerwin
127.0.0.1:6379> get names

- 3、登录从节点查看集群信息和主节点写入的数据
# 使用密码连接本机端口号为6379的redis
./bin/redis-cli -p 6380 -a 123456# 查看集群信息
127.0.0.1:6380> info replication
# 获取key为names的数据
127.0.0.1:6380> get names

3.4、关闭Redis
# 普通关闭,通过redis-cli的shutdown关闭
./bin/redis-cli -p 6379 -a 123456 shutdown# 强制关闭
## 查看redis的进程pid,通过kill -9强制关闭
ps -aux | grep redis
kill -9 pid
四、搭建Redis三哨兵集群
本文使用一台主机部署,会使用不同端口区分哨兵,分别使用26379、26380、26381。
4.1、准备配置文件
先进入Redis解压目录,后续都在该目录下操作
cd /usr/local/redis/redis-6.2.0
4.1.1、准备节点26379配置文件
- 1、创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/sentinel/26379
- 2、拷贝一份sentinel.conf到./sentinel/26379中
cp sentinel.conf ./sentinel/26379/sentinel.conf
- 3、修改几个配置
vi ./sentinel/26379/sentinel.conf
#端口默认为26379。
port 26379# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26379.pid#日志文件
logfile /usr/local/redis/redis-6.2.0/sentinel/26379/sentinel.log#sentinel工作目录(默认/tmp)
dir /usr/local/redis/redis-6.2.0/sentinel/26379# 指定Redis主节点主机IP地址和端口,ip根据实际情况调整,mymaster这个名称随便取,下面配置时也需要指定这个名称,客户端连接时也会使用
# 最后的2是指需要有2个以上sentinel节点认为redis主节点失效,才是真的失效,一般为(sentinel总数/2+1)
sentinel monitor mymaster 10.0.20.13 6379 2# 配置连接密码,此处的密码需要与 redis.conf里面配置的连接密码一致
sentinel auth-pass mymaster 123456# 这里设置了主机多少毫秒无响应,则认为挂了,,默认:30000毫秒
sentinel down-after-milliseconds mymaster 30000# 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
sentinel parallel-syncs mymaster 1#故障转移的超时时间毫秒,默认:180000毫秒
sentinel failover-timeout mymaster 180000
4.1.2、准备节点26380配置文件
- 1、创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/sentinel/26380
- 2、拷贝一份26379的sentinel.conf到./sentinel/26380中,方便修改
cp ./sentinel/26379/sentinel.conf ./sentinel/26380/sentinel.conf
- 3、修改几个配置,这里因为是从26379拷贝过来的只需要修改端口和一些文件存储地址即可
vi ./sentinel/26380/sentinel.conf
#端口默认为26379。
port 26380#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26380.pid#日志文件
logfile /usr/local/redis/redis-6.2.0/sentinel/26380/sentinel.log#sentinel工作目录(默认/tmp)
dir /usr/local/redis/redis-6.2.0/sentinel/26380
4.1.3、准备节点26381配置文件
- 1、创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/sentinel/26381
- 2、拷贝一份26379的sentinel.conf到./sentinel/26381中,方便修改
cp ./sentinel/26379/sentinel.conf ./sentinel/26381/sentinel.conf
- 3、修改几个配置,这里因为是从26379拷贝过来的只需要修改端口和一些文件存储地址即可
vi ./sentinel/26381/sentinel.conf
#端口默认为26379。
port 26381#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26381.pid#日志文件
logfile /usr/local/redis/redis-6.2.0/sentinel/26381/sentinel.log#sentinel工作目录(默认/tmp)
dir /usr/local/redis/redis-6.2.0/sentinel/26381
4.2、启动sentinel集群
- 启动sentinel
# 携带配置启动哨兵26379节点
./bin/redis-sentinel ./sentinel/26379/sentinel.conf
# 携带配置启动哨兵26380节点
./bin/redis-sentinel ./sentinel/26380/sentinel.conf
# 携带配置启动哨兵26381节点
./bin/redis-sentinel ./sentinel/26381/sentinel.conf
- 查看各节点启动状态
# 查看redis-sentinel进程,这里可以看到启动了三个进程
# 如果有进程没有启动成功可以去每个节点信息存储目录查看日志,分析异常原因
ps -aux | grep redis-sentinel

4.3、查看三个哨兵节点信息
# 使用redis-cli连接哨兵
./bin/redis-cli -p 端口
# 连接上后查看哨兵节点信息
127.0.0.1:26379> info sentinel
可以看到一个master主节点,两个salve节点状态,三个哨兵节点都正常

sentinel集群都启动完毕后,会将哨兵集群的元数据信息写入所有sentinel的配置文件里去(追加在文件的
最下面),可以打开一个查看一下。
vi ./sentinel/26379/sentinel.conf

4.4、测试哨兵容灾切换效果
- 1、模拟主节点宕机
# 通过redis-cli的shutdown关闭Redis主节点
./bin/redis-cli -p 6379 -a 123456 shutdown
# 确认主节点6379进程已经下线
ps -aux | grep redis-server

- 2、查看是否将从节点切换成主节点
# 查看6380和6381主从复制信息
./bin/redis-cli -p 6380 -a 123456 info replication
./bin/redis-cli -p 6381 -a 123456 info replication
这里可以看到主节点6379下线后,哨兵将6381切换成了主节点。

4.5、关闭Redis哨兵
# 普通关闭,通过redis-cli的shutdown关闭
./bin/redis-cli -p 端口号 shutdown# 强制关闭
## 查看redis的进程pid,通过kill -9强制关闭
ps -aux | grep redis-sentinel
kill -9 pid
五、注意事项
5.1、远程连接问题
虽然Redis的配置中都开启了远程连接,但是服务器的端口可能没有开放远程连接,需要将Redis服务和哨兵的端口打开外部才能连接上,或者将防火墙关闭,这里是本地操作,如果是云服务器则需要设置对应安全组。
# 开放指定端口号
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
或
#检测防火墙状态 active (running),就是运行状态
systemctl status firewalld
# 停止防火墙
systemctl stop firewalld
# 永久关闭
systemctl disable firewalld
5.2、Redis节点注册到哨兵的IP问题

我们可以查看哨兵中Redis节点的IP,我这里使用的云服务器,哨兵中注册的Redis会使用到内网IP,可以自己ip addr查看一下,就是我们的内网卡,内网通过这个IP连接是没有问题的,但是外网肯定不能使用这个IP,会使用一个云服务给我们提供的外网IP,如果我们直接连接Redis服务,通过外网加6379端口肯定是没有问题的,但是我们外网别的应用中会通过连接到哨兵,然后通过哨兵获取Redis集群信息,也就是说我们通过哨兵获取到的Redis服务IP是服务器的内网IP,例如我这里获取到master节点IP就会是10.0.20.13这样一个内网地址,在外部网络是无法访问的。
六、SpringBoot集成Redis主从架构实现读写分离(哨兵模式)
跳转:https://blog.csdn.net/weixin_44606481/article/details/134017117
相关文章:
Linux部署Redis哨兵集群 一主两从三哨兵(这里使用Redis6,其它版本类似)
目录 一、哨兵集群架构介绍二、下载安装Redis2.1、选择需要安装的Redis版本2.2、下载并解压Redis2.3、编译安装Redis 三、搭建Redis一主两从集群3.1、准备配置文件3.1.1、准备主节点6379配置文件3.1.2、准备从节点6380配置文件3.1.3、准备从节点6381配置文件 3.2、启动Redis主从…...
VR结合|山海鲸虚拟展厅解决方案
方案背景 虚拟现实技术是另一项革命性的创新,它可以将用户带入一个完全虚拟的环境中。借助VR头盔和控制器,用户可以亲临虚拟现实中,与数字世界互动,仿佛置身于其中。 山海鲸根据用户实际需求变化将数字孪生与虚拟现实技术相结合…...
记一次企业微信的(CorpID)和密钥(Secret)泄漏的利用案例
文章目录 一、介绍二、利用过程1、获取AccessToken2、获取企业微信接口IP段3、获取企业微信回调IP段4、通过部门ID,查看返回的ID5、通过部门ID,查看用户列表6、通过便利ID,发现用户信息泄露,可以进行提交报告7、通过添加接口,添加企业账号8、登陆企业账号进行测试三、参考…...
使用Selenium和Java编写爬虫程序
以下是一个使用Selenium和Java编写的音频爬虫程序,该程序使用了proxy的代码。请注意,这个示例需要在IDE中运行,并且可能需要根据您的系统和需求进行调整。 import java.io.IOException; import java.util.List; import java.util.concurrent…...
【Java】PAT Basic Level 1023 组个最小数
题目 1024 组个最小数 作者 CAO, Peng 单位 Google 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1ÿ…...
Redis中设置Hash数据类型的过期时间
1 方案 可以先对key进行赋值,然后对key设置一个过期时间。 (1)依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.3</version></dependency>…...
你真的了解CPU和GPU?
目录 先举个栗子 CPU 什么是CPU CPU的定义 CPU的组成 CPU的功能 GPU 什么是GPU GPU的定义 GPU的组成 GPU的功能 CPU和GPU的区别 先举个栗子 假设你正在编辑一份文档,这时可以将CPU和GPU的角色比喻为文档编辑过程中的两个不同任务。 1. CPU CPU就好比是…...
HarmonyOS开发:NodeJs脚本实现组件化动态切换
前言 上篇文章,我们使用NodeJs脚本完成了HarmonyOS项目的组件化运行,但是由于脚本是基于4.0.0.400版本的DevEco Studio开发的,可能在配置文件的修改上有些许差距,那么遇到这种情况怎么办,一种是再写一套针对性的脚本文…...
基于springboot实现就业信息管理系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现就业信息管理系统演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,就业信息管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人…...
Vue组件的本质和手写通过render渲染函数渲染组件
1.组件的本质 组件就是一组 DOM 元素的封装,本质就是一个对象 (mounted函数中打印一下组件即可看到打印的是一个对象) 如何利用javascript对象来描述一个组件? const MyComponent {render() {return {tag: div,props: {onClick: () > alert(hell…...
【优选算法系列】第一节.双指针(283. 移动零和1089. 复写零)
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:优选算法系列 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!…...
Vue(uniapp)父组件方法和子组件方法执行优先顺序
涉及到的知识点:watch监控:先看问题,父组件从后端通过$ajax获取数据,在将父组件将值传输给子组件,使用子组件使用created钩子函数获取数据,按自己的想法应该是父组件先获取后端数据,在传入给子组…...
怎么突破反爬虫机制
在当今的数字化时代,网络爬虫已经成为了收集信息和数据的重要工具。然而,许多网站和平台都配备了反爬虫机制,以防止恶意攻击和过度访问。对于普通用户来说,如何突破这些反爬虫机制呢?本文将为你提供一些实用的技巧和建…...
CSP-J2023入门组第二轮T4:旅游巴士
题目描述 小 Z 打算在国庆假期期间搭乘旅游巴士去一处他向往已久的景点旅游。 旅游景点的地图共有 n n n 处地点,在这些地点之间连有 m m m 条道路。其中 1 1...
OS的Alarm定时器调度机制
调度表触发的任务在编译时就被静态定义,任务的触发时间和执行顺序是固定的。这种方式适用于已知的、固定的任务触发模式,例如周期性任务或事件驱动任务。而使用 Alarm 机制触发的任务具有更大的灵活性。Alarm 允许在运行时动态地设置和修改任务的触发时间…...
I2C协议
1.简介 IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,半双工通信,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用…...
全栈经验总结(不间断更新)
1.当后端传回来的值为列表套字典[{"id":1,"num":"1"},{"id":2"num":"3"}],如果要在vue3里面渲染图片,可以这样操作 <el-form-item label"图片:"><el-uploa…...
什么是恶意代码?
前言:本文旨在分享交流技术,在这里对恶意代码进行全面的介绍和讲解 目录 一.什么是恶意代码 二.恶意代码的发展史 三.恶意代码的相关定义 四.恶意代码攻击机制 PE病毒 PE文件的格式 脚本病毒 脚本文件隐藏方法 宏病毒 浏览器恶意代码 U盘病毒 …...
HCL模拟器选路实验案例
此选路题目选自职业院校技能竞赛中的一道题比较考验思路,适合于参加新华三杯大赛以及网络专业的同学,当做练习题目进行解题 题目 1.S1、S2、R1、R2运行ospf进程100,区域0,R1、R2、R3、R4、R5运行ospf进程200&#…...
toluaframework中C#怎么调用Lua的方法以及无GC方法
toluaframework中C#怎么调用Lua的方法 问题Util.CallMethodLuaManager.CallFunctionLuaFunction.LazyCall 解决方案LuaFunction脚本无GC消耗的调用 用法总结 问题 用过luaframework框架的人应该都知道框架提供了Util的工具类,工具类提供了一个方法就是Util.CallMet…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...
