实战使用 Docker Compose 搭建 Redis Cluster 集群
文章目录
- 前言
- 技术积累
- Docker Compose简介
- Redis Cluster简介
- Redis Cluster 解决的问题
- 实战演示
- 部署环境
- 创建目录
- 编写Redis配置文件
- 编写Docker-Compose.yml
- 执行yml文件,启动容器
- 查看容器状态
- 创建集群
- 验证集群
- 集群数据验证
- 总结
前言
随着互联网技术的发展,数据存储和访问的速度要求越来越高。Redis作为一个高性能的键值数据库,广泛应用于各种场景中。为了提高系统的可用性和扩展性,Redis Cluster应运而生。本文将介绍如何使用Docker Compose搭建一个Redis Cluster集群,各位大大敬请鉴赏。
技术积累
Docker Compose简介
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过一个YAML文件,可以轻松地配置应用程序的服务、网络和卷等资源,并一键启动整个应用环境。
Redis Cluster简介
Redis Cluster是Redis官方提供的分布式解决方案,支持数据自动分片、节点间通信、故障转移等功能。Redis Cluster通过哈希槽(hash slot)的方式管理数据,共有16384个哈希槽,每个键根据CRC16算法分配到相应的槽中。
- 虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。比如:Redis Cluster槽的范围是0 ~ 16383。槽是集群内数据管理和迁移的基本单位。
- Redis Cluster采用虚拟槽分区,所有的键根据哈希函数映射到0 ~ 16383,计算公式:slot = CRC16(key)&16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。
Redis Cluster 解决的问题
- 存储空间不足:Redis Cluster通过将数据分散存储在多个节点上,提供了横向扩展的能力,从而解决了单实例Redis存储空间不足的问题12。
- 高可用性:Redis Cluster通过数据分片和节点冗余,提高了系统的可用性和容错能力。即使部分节点发生故障,系统仍然可以正常运行,保证了服务的连续性13。
- 并发性能问题:虽然Redis单实例可以处理高并发请求,但随着并发量的增加,单实例的性能会达到瓶颈。Redis Cluster通过分布式架构,允许更多的节点参与处理请求,从而提高了整体的并发处理能力
实战演示
部署环境
Redis Cluster三主三从(官方推荐最小集群数量)
Redis主节点1(6379)
Redis主节点2(6380)
Redis主节点3(6381)
Redis从节点1(6382)
Redis从节点2(6383)
Redis从节点3(6384)
创建目录
编写Redis配置文件
- redis.conf
# 节点配置
# 绑定的主机地址
bind 0.0.0.0
# 禁用保护模式,以便允许集群节点之间的通信
protected-mode no
# 启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis.pid
daemonize no
# 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis.pid
# 指定Redis监听端口,默认端口为6379
# 如果指定0端口,表示Redis不监听TCP连接
port 6379
# 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 0
# 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
# debug (很多信息, 对开发/测试比较有用)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel verbose
# 日志记录方式,默认为标准输出,如果配置为redis为守护进程方式运行,而这里又配置为标准输出,则日志将会发送给/dev/null
logfile redis.log################################ SNAPSHOTTING #################################
# RDB存储配置
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
# Save the DB on disk:
#
# save <seconds> <changes>
#
# Will save the DB if both the given number of seconds and the given
# number of write operations against the DB occurred.
#
# 满足以下条件将会同步数据:
# 900秒(15分钟)内有1个更改
# 300秒(5分钟)内有10个更改
# 60秒内有10000个更改
# Note: 可以把所有“save”行注释掉,这样就取消同步操作了
save 900 1
save 300 10
save 60 10000
# 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes
# 指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
# 指定本地数据库存放目录,文件名由上一个dbfilename配置项指定
dir /data################################ REDIS CLUSTER ###############################
# 开启集群
cluster-enabled yes
# 存储集群节点信息
cluster-config-file nodes.conf
# 超时设置
cluster-node-timeout 5000
################################# REPLICATION #################################
# 设置密码
masterauth 123456789################################## SECURITY ###################################
# 设置密码
requirepass 123456789############################## APPEND ONLY MODE ###############################
# 开启aof配置
appendonly yes
# 指定更新日志条件,共有3个可选值:
# no:表示等操作系统进行数据缓存同步到磁盘(快)
# always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
# everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
# 指定更新日志文件名,默认为appendonly.aof
appendfilename "appendonly.aof"
编写Docker-Compose.yml
version: '3.8'services:redis-master1:image: redis:6-alpinecontainer_name: redis-master1environment:- "TZ=Asia/Shanghai"ports:- "6379:6379"- "16379:16379"volumes:- ./redis.conf:/usr/local/etc/redis/redis.conf- ./redis-master1/data:/datacommand: - "redis-server" - "/usr/local/etc/redis/redis.conf"- "--cluster-announce-ip 172.16.8.212" # 服务器IP- "--cluster-announce-port 6379" # 服务器通讯IP- "--cluster-announce-bus-port 16379" #服务器集群通信IPnetworks:- redis-clusterredis-master2:image: redis:6-alpinecontainer_name: redis-master2environment:- "TZ=Asia/Shanghai"ports:- "6380:6379"- "16380:16379"volumes:- ./redis.conf:/usr/local/etc/redis/redis.conf- ./redis-master2/data:/datacommand:- "redis-server" - "/usr/local/etc/redis/redis.conf"- "--cluster-announce-ip 172.16.8.212"- "--cluster-announce-port 6380"- "--cluster-announce-bus-port 16380"networks:- redis-clusterredis-master3:image: redis:6-alpinecontainer_name: redis-master3environment:- "TZ=Asia/Shanghai"ports:- "6381:6379"- "16381:16379"volumes:- ./redis.conf:/usr/local/etc/redis/redis.conf- ./redis-master3/data:/datacommand:- "redis-server" - "/usr/local/etc/redis/redis.conf"- "--cluster-announce-ip 172.16.8.212"- "--cluster-announce-port 6381"- "--cluster-announce-bus-port 16381"networks:- redis-clusterredis-slave1:image: redis:6-alpinecontainer_name: redis-slave1environment:- "TZ=Asia/Shanghai"ports:- "6382:6379"- "16382:16379"volumes:- ./redis.conf:/usr/local/etc/redis/redis.conf- ./redis-slave1/data:/datacommand:- "redis-server" - "/usr/local/etc/redis/redis.conf"- "--cluster-announce-ip 172.16.8.212"- "--cluster-announce-port 6382"- "--cluster-announce-bus-port 16382"networks:- redis-cluster redis-slave2:image: redis:6-alpinecontainer_name: redis-slave2environment:- "TZ=Asia/Shanghai"ports:- "6383:6379"- "16383:16379"volumes:- ./redis.conf:/usr/local/etc/redis/redis.conf- ./redis-slave2/data:/datacommand:- "redis-server" - "/usr/local/etc/redis/redis.conf"- "--cluster-announce-ip 172.16.8.212"- "--cluster-announce-port 6383"- "--cluster-announce-bus-port 16383"networks:- redis-clusterredis-slave3:image: redis:6-alpinecontainer_name: redis-slave3environment:- "TZ=Asia/Shanghai"ports:- "6384:6379"- "16384:16379"volumes:- ./redis.conf:/usr/local/etc/redis/redis.conf- ./redis-slave3/data:/datacommand:- "redis-server" - "/usr/local/etc/redis/redis.conf"- "--cluster-announce-ip 172.16.8.212"- "--cluster-announce-port 6384"- "--cluster-announce-bus-port 16384"networks:- redis-clusternetworks:redis-cluster:driver: bridge
执行yml文件,启动容器
docker-compose -f docker-compose.yaml up -d
查看容器状态
docker ps -a
可以看到所有容器都已经成功启动了
创建集群
docker exec -it redis-master1 redis-cli -h 127.0.0.1 -p 6379 -a 123456789 --cluster create 172.16.8.212:6379 172.16.8.212:6380 172.16.8.212:6381 172.16.8.212:6382 172.16.8.212:6383 172.16.8.212:6384 --cluster-replicas 1 --cluster-yes
D:\A-senfel\docker-data\redis\redis-cluster>docker exec -it redis-master1 redis-cli -h 127.0.0.1 -p 6379 -a 123456789 --cluster create 172.16.8.212:6379 172.16.8.212:6380 172.16.8.212:6381 172.16.8.212:6382 172.16.8.212:6383 172.16.8.212:6384 --cluster-replicas 1 --cluster-yes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.16.8.212:6383 to 172.16.8.212:6379
Adding replica 172.16.8.212:6384 to 172.16.8.212:6380
Adding replica 172.16.8.212:6382 to 172.16.8.212:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 148094fae3cb4ebefed6aa3591d4612d7f68057d 172.16.8.212:6379slots:[0-5460] (5461 slots) master
M: 380b3a38c654a5594612064b5a6e62af0eabd908 172.16.8.212:6380slots:[5461-10922] (5462 slots) master
M: aef9586773da0d70b556d01345daeebd94c5d4b1 172.16.8.212:6381slots:[10923-16383] (5461 slots) master
S: 9b7093f4270c9f385ea44935b4eb53c2a5565807 172.16.8.212:6382replicates aef9586773da0d70b556d01345daeebd94c5d4b1
S: 399b05fed734674e4d6971cfe3e3f3f0e1033585 172.16.8.212:6383replicates 148094fae3cb4ebefed6aa3591d4612d7f68057d
S: 44cb445c5403cb8ef3c237223021ce5752dc1d1e 172.16.8.212:6384replicates 380b3a38c654a5594612064b5a6e62af0eabd908
>>> 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 172.16.8.212:6379)
M: 148094fae3cb4ebefed6aa3591d4612d7f68057d 172.16.8.212:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 380b3a38c654a5594612064b5a6e62af0eabd908 172.16.8.212:6380slots:[5461-10922] (5462 slots) master1 additional replica(s)
M: aef9586773da0d70b556d01345daeebd94c5d4b1 172.16.8.212:6381slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 9b7093f4270c9f385ea44935b4eb53c2a5565807 172.16.8.212:6382slots: (0 slots) slavereplicates aef9586773da0d70b556d01345daeebd94c5d4b1
S: 399b05fed734674e4d6971cfe3e3f3f0e1033585 172.16.8.212:6383slots: (0 slots) slavereplicates 148094fae3cb4ebefed6aa3591d4612d7f68057d
S: 44cb445c5403cb8ef3c237223021ce5752dc1d1e 172.16.8.212:6384slots: (0 slots) slavereplicates 380b3a38c654a5594612064b5a6e62af0eabd908
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
如上所示,我们已经加入集群
验证集群
info replication 查看Redis节点信息
cluster nodes 查看集群节点信息
docker exec -it redis-master1 redis-cli -h 127.0.0.1 -p 6379 -a 123456789 cluster nodes
D:\A-senfel\docker-data\redis\redis-cluster>docker exec -it redis-master1 redis-cli -h 127.0.0.1 -p 6379 -a 123456789 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
380b3a38c654a5594612064b5a6e62af0eabd908 172.16.8.212:6380@16380 master - 0 1750842509599 2 connected 5461-10922
aef9586773da0d70b556d01345daeebd94c5d4b1 172.16.8.212:6381@16381 master - 0 1750842509599 3 connected 10923-16383
9b7093f4270c9f385ea44935b4eb53c2a5565807 172.16.8.212:6382@16382 slave aef9586773da0d70b556d01345daeebd94c5d4b1 0 1750842509000 3 connected
399b05fed734674e4d6971cfe3e3f3f0e1033585 172.16.8.212:6383@16383 slave 148094fae3cb4ebefed6aa3591d4612d7f68057d 0 1750842509904 1 connected
148094fae3cb4ebefed6aa3591d4612d7f68057d 172.16.8.212:6379@16379 myself,master - 0 1750842509000 1 connected 0-5460
44cb445c5403cb8ef3c237223021ce5752dc1d1e 172.16.8.212:6384@16384 slave 380b3a38c654a5594612064b5a6e62af0eabd908 0 1750842509000 2 connected
如上所示,各个节点加入集群,并显示三主三从。
集群数据验证
redis-cli -c 客户端使用集群模式
写入数据到主节点1
docker exec -it redis-master1 redis-cli -c -h 127.0.0.1 -p 6379 -a 123456789 SET name "test_cluster_name"
主节点1读取数据查看是否设置成功
docker exec -it redis-master1 redis-cli -c -h 127.0.0.1 -p 6379 -a 123456789 GET name
主节点2读取数据查看是否设置成功
docker exec -it redis-master2 redis-cli -c -h 127.0.0.1 -p 6379 -a 123456789 GET name
从节点1读取数据,查看是否同步
docker exec -it redis-slave1 redis-cli -c -h 127.0.0.1 -p 6379 -a 123456789 GET name
D:\A-senfel\docker-data\redis\redis-cluster>docker exec -it redis-master1 redis-cli -c -h 127.0.0.1 -p 6379 -a 123456789 SET name "test_cluster_name"
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OKD:\A-senfel\docker-data\redis\redis-cluster>docker exec -it redis-master1 redis-cli -h 127.0.0.1 -p 6379 -a 123456789 GET name
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
"test_cluster_name"D:\A-senfel\docker-data\redis\redis-cluster>docker exec -it redis-master2 redis-cli -c -h 127.0.0.1 -p 6379 -a 123456789 GET name
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
"test_cluster_name"D:\A-senfel\docker-data\redis\redis-cluster>docker exec -it redis-slave1 redis-cli -c -h 127.0.0.1 -p 6379 -a 123456789 GET name
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
"test_cluster_name"
总结
通过本文的实践,我们成功地使用Docker Compose搭建了一个Redis Cluster集群。这个过程不仅帮助我们理解了Redis Cluster的基本原理,还掌握了如何利用Docker Compose简化多容器应用的部署。其中重要的是Redis Cluster解决了分布式储存和提升高并发性能的瓶颈,大大提升了中间件和应用系统的高可用,简直不要太爽。
相关文章:
实战使用 Docker Compose 搭建 Redis Cluster 集群
文章目录 前言技术积累Docker Compose简介Redis Cluster简介Redis Cluster 解决的问题 实战演示部署环境创建目录编写Redis配置文件编写Docker-Compose.yml执行yml文件,启动容器查看容器状态创建集群验证集群集群数据验证 总结 前言 随着互联网技术的发展ÿ…...
Tauri(2.5.1)+Leptos(0.8.2)开发自用桌面小程序--DeepSeek辅助编程(俄罗斯方块)
在之前工作基础上(Tauri(2.5.1)Leptos(0.8.2)开发自用桌面小程序-CSDN博客),继续进行自用桌面小程序的开发,这次完全使用DeepSeek辅助编程做一个俄罗斯方块游戏,大部分代码由DeepSeek自主完成,Bug扔给DeepS…...
flex布局实例:把色子放进盒子里
目录 一、flex布局实例:把色子放进盒子里 1、基础样式 二、justify-content 属性 三、flex-direction 属性 四、align-items 属性 五、flex-wrap 属性 二、flex布局应用到常见场景 非常详细的讲解flex布局,看一看,练一练! …...
【启发式算法】RRT*算法详细介绍(Python)
📢本篇文章是博主人工智能(AI)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
基于R语言的亚组分析与森林图绘制1
亚组分析是临床研究中的重要分析方法,其核心是通过将研究对象按基线特征(如年龄、性别或吸烟状况等)划分为不同亚组,进而评估干预措施或暴露因素在各亚组中对结局影响的差异性。 在亚组分析中,交互作用(P for interaction)是关键指标,用于判断干预措施或暴露因素与亚组…...
idea, CreateProcess error=206, 文件名或扩展名太长
idea, CreateProcess error206, 文件名或扩展名太长 解决 “CreateProcess error206, 文件名或扩展名太长” 错误 CreateProcess error206 是 Windows 系统特有的错误,表示命令行参数超出了 Windows 的 32767 字符限制。这个问题在 Java 开发中尤其常见,…...
aspose.word在IIS后端DLL中高并发运行,线程安全隔离
aspose.word在IIS后端DLL中运行,加载很慢,如何为全部用户加载,再每个用户访问时在各自线程中直接可以打开WORD文件处理 Aspose.Words 在 IIS 中优化加载性能方案 针对 Aspose.Words 在 IIS 后端 DLL 中加载缓慢的问题,我们可以通过单例模式预加载组件并结合线程安…...
day042-负载均衡与web集群搭建
文章目录 0. 老男孩思想-面试官问:你对加班的看法?1. 负载均衡2. 搭建负载均衡的WordPress集群2.1 负载均衡服务器2.2 配置web服务器2.3 测试 踩坑记录1. /var/cache/nginx权限问题 0. 老男孩思想-面试官问:你对加班的看法? 互联网公司没有不加班的&a…...
DuDuTalk | 武汉赛思云科技有限公司通过武汉市人工智能企业认定!
近日,2025年武汉市人工智能企业名单正式公布!武汉赛思云科技有限公司(以下简称赛思云科技)凭借卓越的技术实力与创新成果,成功入选武汉市人工智能企业。这是对公司长期深耕AI语音智能领域、推动数字化转型的高度认可&a…...
Tita CRM飞书协同版:解锁企业销售与交付管理新效能
数字化转型的破局之道 在数字经济加速发展的今天,传统管理模式正面临前所未有的挑战: • 销售过程缺乏可视化管控手段 • 项目执行存在严重的信息孤岛 • 跨部门协作效率持续低下 • 绩效考核缺乏客观数据支撑 Tita CRM作为专业的智能化管理平台&#x…...
web安全之h2注入系统学习
起初是在N1 Junior 2025 上面碰到一题,考点是h2的sql注入。由于之前没有见过,趁此机会系统学习一番 实验代码 public class H2Inject {public static void main(String[] args) throws Exception{JdbcDataSource dataSource new JdbcDataSource();dataS…...
LVS-DR负载均衡群集深度实践:高性能架构设计与排障指南
目录 一、核心原理与理论 二、背景与架构设计 三、全流程部署步骤 1. NFS共享存储配置(192.168.7.100) 2. Real Server节点配置(四台服务器) 3. Director服务器配置 四、常见问题解决方案 五、生产环境总结 拓扑示意图&am…...
Java如何导出word(根据模板生成),通过word转成pdf,放压缩包
<!-- 导出word文档所需依赖--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.0-beta</version></dependency><dependency><groupId>org.apache.poi</gr…...
.NET 7.0 EF Core:一、创建Web API 项目基础框架和用户表的增删改查
demo 地址: https://github.com/iotjin/Jh.Admin.NETCore 代码不定时更新,请前往github查看最新代码 .NET 7.0 EF Core:一、创建Web API项目 官方教程序一、项目目录结构各层职责说明1️⃣ Admin.NETCore.API(接口层)2️⃣ Admin.…...
一篇文章了解XML
一、什么是 XML? XML 是一种结构化数据的标记语言,用来存储、传输和描述数据。 它和 HTML 很像,但它的标签是自定义的,不限定格式和外观,而是强调数据的结构和含义。 XML不是用来展示数据的,HTML是用来展…...
Windows下安装zookeeper
有关Linux安装zk的文章可以参考下我之前写的: Zookeeper 3.8.4 安装和参数解析 Windows下的下载和Linux是一样的,都是同一个包,目前zk稳定版是 3.8.4 下载解压后 在根目录下创建 data 文件夹用来存放数据文件 在 conf 文件夹中,…...
计算机网络 网络层:控制平面
在本章中,包含网络层的控制平面组件。控制平面作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。5.2节,传统的计算图中最低开销路径的路由选…...
探索阿里云智能媒体管理IMM:解锁媒体处理新境界
一、引言:开启智能媒体管理新时代 在数字化浪潮的席卷下,媒体行业正经历着前所未有的变革。从传统媒体到新媒体的转型,从内容生产到传播分发,每一个环节都在寻求更高效、更智能的解决方案。而云计算,作为推动这一变革…...
微信点餐小程序—美食物
本项目是基于WAMP Server 和PHP 动态网页技术构建的微信小程序点餐系统,该系统主要分为前端(微信小程序)和后端(基于PHPMySQL服务器端) 整体架构流程 1、前端部分 用户界面:展示菜品、处理用户点餐操作、…...
Python零基础入门到高手8.5节: 实现选择排序算法
目录 8.5.1 排序算法简介 8.5.2 选择排序算法 8.5.3 好好学习,天天向上 8.5.1 排序算法简介 所谓排序,是指将数据集合中的元素按从小到大的顺序进行排列,或按从大到小的顺序进行排列。前者称为升序排序,后者称为降序排序。在数…...
JavaEE初阶第四期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(二)
专栏:JavaEE初阶起飞计划 个人主页:手握风云 目录 一、Thread类及常用方法 2.1. Thread的常见构造方法 2.2. Thread的常见属性 2.3. 启动一个线程 2.4. 中断一个线程 2.5. 等待一个线程 2.6. 休眠当前线程 一、Thread类及常用方法 2.1. Thread的…...
Metasploit常用命令详解
一、Metasploit 概述 Metasploit是一款开源的渗透测试框架,由 H.D. Moore 于 2003 年首次发布,目前由 rapid7 公司维护。它整合了大量漏洞利用模块、后渗透工具和漏洞扫描功能,已成为网络安全工程师、红队 / 蓝队成员及安全研究人员的核心工…...
2025.6.24总结
今天发生了两件事,这每件事情都足以影响我的工作状态。 1.团队中有人要转岗 这算是最让我有些小震惊的事件了。我不明白,那个同事干得好好的,为啥会转岗,为啥会被调到其他团队。虽然团队有正编,有od,但我自始自终觉得…...
2023年全国青少年信息素养大赛Python 复赛真题——玩石头游戏
今日python每日练习题为——玩石头游戏,大家记得坚持刷题哦,闯入国赛~ 每轮可拿 1-3 块石头,双方均采取最优策略。若石头数 n 为 4 的倍数,无论先手取 k 块(1≤k≤3),后手总能取 4-k 块…...
MySQL之SQL性能优化策略
MySQL之SQL性能优化策略 一、主键优化策略1.1 主键的核心作用1.2 主键设计原则1.3 主键优化实践 二、ORDER BY优化策略2.1 ORDER BY执行原理2.2 ORDER BY优化技巧2.3 处理大结果集排序 三、GROUP BY优化策略3.1 GROUP BY执行原理3.2 GROUP BY优化方法 四、LIMIT优化策略4.1 LIM…...
AI时代工具:AIGC导航——AI工具集合
大家好!AIGC导航是一个汇集多种AIGC工具的平台,提供了丰富的工具和资源。 工具功能: 该平台整合了多样的AIGC工具,涵盖了绘画创作、写作辅助以及视频制作等多个领域。绘画工具能够生成高质量的图像作品;写作工具支持从构思到润色的全流程写…...
性能测试-jmeter实战4
课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战4 jmeter环境搭建1. 安装Java环境(必需) JMeter环境搭建完整指南1. 安装Java࿰…...
C++字符串的行输入
1、字符串的输入 下面用一个真实的示例来进行演示: #include<iostream> #include<string>int main() {using namespace std;const int ArSize 20;char name[ArSize];char dessert[ArSize];cout << "Enter your name:\n";cin >>…...
【Linux网络与网络编程】15.DNS与ICMP协议
1. DNS 1.1 DNS介绍 TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但是 IP 地址不方便记忆,于是人们发明了一种叫主机名的字符串,并使用 hosts 文件来描述主机名和 IP 地址的关系。最初, 通过互连网信息中心(SRI-NIC)来…...
Python训练营-Day40-训练和测试的规范写法
1.单通道图片训练 # import torch # import torch.nn as nn # import torch.optim as optim # from torchvision import datasets, transforms # from torch.utils.data import DataLoader # import matplotlib.pyplot as plt # import numpy as np# # 设置中文字体支持 # plt…...
【Python-Day 29】万物皆对象:详解 Python 类的定义、实例化与 `__init__` 方法
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
内存泄漏和内存溢出的区别
内存泄漏(Memory Leak)和内存溢出(Memory Overflow / Out Of Memory, OOM)是软件开发中两个密切相关但又本质不同的内存问题: 核心区别一句话概括: 内存泄漏: 有垃圾对象占用内存却无法被回收&…...
Linux系统---Nginx配置nginx状态统计
配置Nignx状态统计 1、下载vts模块 https://github.com/vozlt/nginx-module-vts [rootclient ~]# nginx -s stop [rootclient ~]# ls anaconda-ks.cfg nginx-1.27.3 ceph-release-1-1.el7.noarch.rpm nginx-1.27.3.tar.gz info.sh …...
linux操作系统的软件架构分析
一、linux操作系统的层次结构 1.内核的主要功能 1)进程管理 2)内存管理 3)文件系统 4)进程间通信、I/O系统、网络通信协议等 2.系统程序 1)系统接口函数库,比如libc 2)shell程序 3)编译器、编辑…...
快速手搓一个MCP服务指南(三):FastMCP的核心组件-构建MCP服务的关键技术实现
FastMCP 是一套面向 LLM 应用开发的工具框架,通过标准化协议衔接大语言模型与外部功能组件,构建「LLM工具」的闭环交互体系。其核心技术体系包含四大模块:工具系统将 Python 函数转化为 LLM 可调用的能力单元,通过类型注解实现参数…...
创建首个 Spring Boot 登录项目
📌 摘要 在 Java Web 开发中,登录功能是最基础也是最重要的模块之一。本文将手把手带你使用 IntelliJ IDEA 和 Maven 构建一个基于 Spring Boot 的简单登录系统,涵盖: 使用 IDEA 创建 Spring Boot 项目配置 Maven 依赖ÿ…...
order、sort、distribute和cluster by(Spark/Hive)
1. abstract ORDER BY:完整查询结果的全局行排序。与SORT BY、CLUSTER BY、DISTRIBUTE BY互斥,不能同时使用。 示例SELECT * FROM table_name ORDER BY column_name;SORT BY:只在每个分区内排序,局部排序结果不是全局有序。与ORD…...
# Python中等于号的使用
# Python中等于号的使用 ## 1. 问题的分析与思考 在Python中,等于号()是一个赋值运算符,用于将右侧的值或表达式的结果赋给左侧的变量。这是Python(以及许多其他编程语言)中非常基础且核心的一个概念。理…...
无人机神经网络模块运行与技术难点
一、神经网络模块的运行方式 1. 分层处理架构 感知层 多模态数据融合:通过八元数卷积网络(OCNN)统一处理LiDAR、摄像头、IMU等异构传感器数据,将点云坐标(x/y/z)、图像RGB与光流信息编码至8维虚部&#…...
宝塔服务器调优工具 1.1(Opcache优化)
第一步:宝塔服务器调优工具 1.1(按照下面的参数填写) 第二步:路径/www/server/php/80/etc/php.ini 搜索jit jit1235 其中1235根据服务器情况修改 第三步:路径/www/server/php/80/etc/php-cli.ini 搜索 jit1235 其中…...
day041-web集群架构搭建
文章目录 0. 老男孩思想-高薪四板斧1. web集群架构图2. 搭建异地备份服务2.1 服务端-阿里云服务器2.1.1 查看rsync软件包2.1.2 添加rsync配置文件2.1.3 添加虚拟用户2.1.4 创建校验用户密码文件2.1.5 创建备份目录2.1.6 启动服务2.1.7 开放安全组端口2.1.8 发送检查邮件 2.2 客…...
国产化条码类库Spire.Barcode教程:如何使用 C# 读取 PDF 中的条码(两种方法轻松实现)
在 PDF 文档的 .NET 平台处理流程中,使用 C# 读取 PDF 条码 是一项常见需求,特别适用于处理扫描件或电子表单。无论是物流、金融、医疗还是制造行业,PDF 文档中经常包含用于追踪或识别的条码。这些条码可能是嵌入图像,也可能是矢量…...
vue 3 计算器
效果: <template><div class"calculator-container"><div class"calculator"><!-- 显示区域 --><div class"display">{{ formattedDisplay }}</div><!-- 按钮区域 --><div class"…...
CRMEB PHP多门店版v3.2.1系统全开源+Uniapp前端+搭建教程
一.介绍 CRMEB多店版是一款为品牌连锁门店打造的私域电商解决方案,以三大运营模式为核心,助力品牌连锁门店轻松构建全渠道、一体化的私域电商生态,促进“线上电商”与“线下门店”销售运营融合,加速品牌数字化转型,为…...
主机复制文字和文件到 Ubuntu 虚拟机
在 VMware Workstation Pro 16 中复制文字和文件到 Ubuntu 虚拟机,方法如下: Open-VM-Tools 禁用 Wayland 解决 。 1.安装 VMware Tools(推荐)或 open-vm-tools: sudo apt update sudo apt install open-vm-tools…...
性能测试 —— 数据库的连接池和主从同步和分表分区
一、数据库的调优(库层面) 1、数据库连接池 1、介绍:数据库连接池(Database Connection Pool)是一种用于管理数据库连接的技术,它通过预先创建并维护一组数据库连接来提高应用程序的性能和可扩展性。 2、创建、管理、关闭 数据…...
猿人学js逆向比赛第一届第十二题
一、分析请求 看到这里只有一个m的密文参数,没有cookie,请求头等其他的参数,那么这里跟一堆栈信息。 很顺利地锁定了m的加密位置。看到是字符串拼接然后使用btoa函数进行编码,那么这里尝试使用Python复现一下。顺利拿到结果。 复现…...
第十节 新特性与趋势-CSS层叠规则升级
以下是关于 CSS层叠规则升级 的全面解析,结合最新规范(如级联层layer)和传统层叠机制的演进,从核心原理、应用场景到实践策略的系统性总结: 一、传统层叠规则的三大支柱 CSS层叠规则的传统机制基于以下三个维…...
关键领域软件工厂的安全中枢如何全面升级供应链检测能力
随着软件供应链安全体系在互联网、金融等领域逐步成熟,关键领域正加速迈向以 MLOps、软件工厂为核心的新型研发生态。在这一过程中,面对代码安全、依赖合规、系统可信等多重挑战,传统人工审查模式已难以满足国家级高安全性要求。 Gitee Scan…...
西门子G120XA变频器:数据中心能效革命的核心引擎
在数字经济爆发式增长的今天,数据中心已成为支撑社会运转的"数字心脏"。然而,其庞大的能耗需求与绿色低碳目标之间的矛盾日益凸显——尤其是冷却系统作为数据中心第二大能耗单元(占比约35%),正成为能效提升的…...