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

Redis05-进阶-主从

零、文章目录

Redis05-进阶-主从

1、搭建主从架构

(1)概述
  • 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

(2)集群概况
  • 我们搭建的主从集群共包含三个节点,一个主节点,两个从节点。操作系统是 CentOS7.9。
  • 这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:
IP配置文件路径PORT角色
192.168.119.171/etc/redis/7001/redis.conf7001master
192.168.119.171/etc/redis/7002/redis.conf7002slave
192.168.119.171/etc/redis/7003/redis.conf7003slave
(3)准备实例配置
  • **创建目录:**要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。我们创建三个文件夹,名字分别叫7001、7002、7003。
# 进入/tmp目录
cd /etc/redis/
# 创建目录
mkdir 7001 7002 7003
  • 配置文件/etc/redis/7001/redis.conf 配置如下,这个是 master 节点的配置
# 允许所有 IP 连接
bind 0.0.0.0# 关闭保护模式 
protected-mode no# 以守护进程启动
daemonize yes# 开启RDB
# save ""
save 3600 1
save 300 100
save 60 10000# 关闭AOF
appendonly no# redis实例的声明 IP
replica-announce-ip 192.168.119.171# 端口改成7001
port 7001
# rdb文件存储路径改成当前路径
dir /etc/redis/7001/
  • 配置文件/etc/redis/7002/redis.conf 配置如下,这个是 slave 节点的配置
# 允许所有 IP 连接
bind 0.0.0.0# 关闭保护模式 
protected-mode no# 以守护进程启动
daemonize yes# 开启RDB
# save ""
save 3600 1
save 300 100
save 60 10000# 关闭AOF
appendonly no# redis实例的声明 IP
replica-announce-ip 192.168.119.171# 端口改成7002
port 7002
# rdb文件存储路径改成当前路径
dir /etc/redis/7002/# 开启主从关系
slaveof 192.168.119.171 7001
  • 配置文件/etc/redis/7003/redis.conf 配置如下,这个是 slave 节点的配置
# 允许所有 IP 连接
bind 0.0.0.0# 关闭保护模式 
protected-mode no# 以守护进程启动
daemonize yes# 开启RDB
# save ""
save 3600 1
save 300 100
save 60 10000# 关闭AOF
appendonly no# redis实例的声明 IP
replica-announce-ip 192.168.119.171# 端口改成7003
port 7003
# rdb文件存储路径改成当前路径
dir /etc/redis/7003/# 开启主从关系
slaveof 192.168.119.171 7001
  • 配置说明:
    • **持久化配置:**持久化模式改为默认的RDB模式,AOF保持关闭状态。
    • 修改**bind**** 参数:** bind 0.0.0.0 允许所有 IP 连接。
    • **修改实例的声明IP:**虚拟机本身有多个IP,为了避免混乱,我们需要指定每一个实例的 IP 信息。
    • **修改每个实例的端口、工作目录:**修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在目录。
    • **为每个slave 节点开启主从关系:**slaveof 192.168.119.171 7001
(4)启动实例
  • 防止端口的问题,先将防火墙关闭
# 关闭防火墙
sudo systemctl stop firewalld
# 关闭防火墙开机启动
sudo systemctl disable firewalld
  • 我们打开3个ssh窗口,分别启动3个redis实例,启动命令:
# 第1个
redis-server /etc/redis/7001/redis.conf
# 第2个
redis-server /etc/redis/7002/redis.conf
# 第3个
redis-server /etc/redis/7003/redis.conf
  • 如果要一键停止,可以运行下面命令:
printf '%s\n' 7001 7002 7003 | xargs -I{} -t redis-cli -p {} shutdown
(5)开启主从关系
  • 要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。
  • 有临时和永久两种模式:
    • 永久:修改配置文件,在redis.conf中添加一行配置:slaveof <masterip> <masterport>
    • 临时:使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效)。
    • 注意:在5.0以后新增命令replicaof,与salveof效果一致。
  • 上面已经用配置文件实现了主从关系,现在演示命令方式。
# 连接 7002
redis-cli -p 7002
# 执行slaveof
slaveof 192.168.119.171 7001# 连接 7003
redis-cli -p 7003
# 执行slaveof
slaveof 192.168.119.171 7001# 连接 7001
redis-cli -p 7001
# 查看状态
info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.119.171,port=7002,state=online,offset=56,lag=1
slave1:ip=192.168.119.171,port=7003,state=online,offset=56,lag=1
master_failover_state:no-failover
master_replid:9416e12727f8b889f6293c3eedcb9f07de1670d6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56
(6)测试
  • 利用redis-cli连接7001,执行set num 123
  • 利用redis-cli连接7002,执行get num,再执行set num 666
127.0.0.1:7002> get num
"123"
127.0.0.1:7002> set num 666
(error) READONLY You can't write against a read only replica.
  • 利用redis-cli连接7003,执行get num,再执行set num 888
127.0.0.1:7003> get num
"123"
127.0.0.1:7003> set num 888
(error) READONLY You can't write against a read only replica.
  • 可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。
(7)设置开机启动
  • 为了使 Redis 在系统启动时自动运行,可以创建一个 systemd 服务文件:
# master节点服务文件
vi /etc/systemd/system/redismaster.service[Unit]
Description=redismaster
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /tmp/7001/redis.conf
PrivateTmp=true[Install]
WantedBy=multi-user.target
  • 保存并退出后,重新加载 systemd 配置:
systemctl daemon-reload
  • 可以用下面这组命令来操作redis:
# 启动
systemctl start redismaster
# 停止
systemctl stop redismaster
# 重启
systemctl restart redismaster
# 查看状态
systemctl status redismaster
# 开机自启
systemctl enable redismaster
  • 同样配置 redisslave01 节点
# slave01节点服务文件
vi /etc/systemd/system/redisslave01.service[Unit]
Description=redisslave01
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /tmp/7002/redis.conf
PrivateTmp=true[Install]
WantedBy=multi-user.target
  • 同样配置 redisslave02 节点
# slave02节点服务文件
vi /etc/systemd/system/redisslave02.service[Unit]
Description=redisslave02
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /tmp/7003/redis.conf
PrivateTmp=true[Install]
WantedBy=multi-user.target

2、数据同步原理

(1)主从第一次执行全量同步
  • slave节点请求增量同步
  • master节点判断replid,发现不一致,拒绝增量同步
  • master将完整内存数据生成RDB,发送RDB到slave
  • slave清空本地数据,加载master的RDB
  • master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
  • slave执行接收到的命令,保持与master之间的同步

(2)如何判断是第一次同步数据
  • Replication Id:简称replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid
  • offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。
  • 因此slave做数据同步,必须向master声明自己的replication id 和offset,master才可以判断到底需要同步哪些数据。
(3)slave重启后执行增量同步

  • repl_baklog大小有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致尚未备份的数据被覆盖,则无法基于log做增量同步,只能再次全量同步。
(4)主从集群优化
  • 在master中配置repl-diskless-sync yes启用无磁盘复制,避免全量同步时的磁盘IO。
  • Redis单节点上的内存占用不要太大,减少RDB导致的过多磁盘IO
  • 适当提高repl_baklog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
  • 限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力

相关文章:

Redis05-进阶-主从

零、文章目录 Redis05-进阶-主从 1、搭建主从架构 &#xff08;1&#xff09;概述 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 &#xff08;2&#xff09;集群概况 我们搭建的主从…...

rockermq多线程消费者配置

rockermq多线程消费者配置 增加消费者数量实现消费者consumer多线程消费 或是 task分布式部署&#xff0c;原理一样 都是增加 consumer数量&#xff0c;程序在多线程 处理的地方已经添加过 分布式redisson锁 保证数据在多线程下的唯一性。 配置 task.yml 配置文件 &#xff08…...

Spring框架的ObjectProvider用法-笔记

在Spring框架中&#xff0c;ObjectProvider 是一个用于灵活获取Bean实例的接口&#xff0c;它允许开发者以编程方式有条件地或可选地获取Bean&#xff0c;而无需强制依赖注入&#xff0c;避免在Bean不存在时启动失败。 1. ObjectProvider 的核心功能 ObjectProvider 是Spring…...

DigitalOcean推出Valkey托管缓存服务

今天我们激动地宣布推出DigitalOcean的Valkey托管缓存服务&#xff0c;这是我们全新的托管数据库服务&#xff0c;能够无缝替换托管缓存&#xff08;此前称为托管Redis&#xff09;。Valkey托管缓存服务在你一直依赖的功能基础上&#xff0c;还提供了增强工具来支持你的开发需求…...

如何通过挖掘需求、SEO优化及流量变现成功出海?探索互联网产品的盈利之道

挖掘需求&#xff0c;优化流量&#xff0c;实现变现&#xff1a;互联网出海产品的成功之路 在当今全球化的数字时代&#xff0c;越来越多的企业和个人选择将业务扩展到国际市场。这一趋势不仅为企业带来了新的增长机会&#xff0c;也为个人提供了通过互联网产品实现盈利的途径…...

ASP.NET图片盗链防护指南

图片盗链(Hotlinking)是指其他网站直接链接到你服务器上的图片资源,这会消耗你的带宽和服务器资源。以下是几种在ASP.NET中防止图片盗链的有效方法: 1. 使用URL重写模块(推荐) 在Web.config中配置URL重写规则: xml <system.webServer> <rewrite> …...

2025-4-25 情绪周期视角复盘(mini)

直接说结论&#xff0c;没有前戏哈&#xff0c;国芳集团这波消费的行情就相当于当时机器人大周期里的DS的一个补涨周期&#xff0c;那么红宝丽就是接替了中毅达的衣钵的趋势穿越龙&#xff0c;趋势穿越龙没有结束&#xff0c;仅仅是主升暂停&#xff0c;高位震荡&#xff0c;后…...

Java求职者面试:从Spring Boot到微服务的技术深度探索

场景&#xff1a;互联网大厂Java求职者面试 角色介绍&#xff1a; 面试官&#xff1a;技术精湛&#xff0c;负责把控面试质量。谢飞机&#xff1a;搞笑的程序员&#xff0c;偶尔能答对问题。 第一轮&#xff1a;基础知识 面试官&#xff1a;谢飞机&#xff0c;你能简要介绍…...

wsl(8) -- 图形界面

1. 前言 记录一些关于wsl2图形界面的事情。 2. x11-apps wsl2默认已支持图形界面&#xff0c;只是我们选择安装的wsl2 ubuntu发行版是非桌面的&#xff0c;其中没有集成桌面应用&#xff0c;Linux的桌面和windows不同&#xff0c;windows的桌面系统是内核的一部分&#xff0…...

socket套接字-UDP(中)

socket套接字-UDP&#xff08;上&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147465441?fromshareblogdetail&sharetypeblogdetail&sharerId147465441&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link UDP服务器…...

Android源码编译命令详解

一、引言 先看下面几条指令,相信编译过Android源码的人都再熟悉不过的。 source setenv.sh lunch make -j8记得最初刚接触Android时,同事告诉我用上面的指令就可以编译Android源码,指令虽短但过几天就记不全或者忘记顺序,每次编译时还需要看看自己的云笔记,冰冷的指令总…...

AI 发展历史与关键里程碑_附AI 模型清单及典型应用场景以及物流自动化适合的模型选择

AI 发展历史与关键里程碑_附AI 模型清单及典型应用场景以及物流自动化适合的模型选择 下面分三部分进行介绍: 1. AI 发展历史与关键里程碑 1950 年:图灵测试 1950 年,艾伦图灵提出“图灵测试”(Turing Test),首次以可检验的方式讨论机器能否“思考”。# 图灵测试示意:…...

MVCC(多版本并发控制)

MVCC&#xff08;多版本并发控制&#xff09;是数据库实现高并发事务的核心技术之一&#xff0c;其核心是通过数据多版本解决读写冲突。以下从‌技术原理、实现细节、应用场景、优缺点‌四个方面深入解析。 ‌一、技术原理‌ 1. ‌核心思想‌ ‌数据多版本化‌&#xff1a;每…...

可以隐藏列的表格

今天积累一个可以隐藏列的表格的实现方法 需求&#xff1a; 表格中有一部分列可以隐藏&#xff0c;在列名右侧有一个复选框&#xff0c;点击勾选展示&#xff0c;否则隐藏另有一个小工具栏&#xff0c;其中有每一列对应的复选框&#xff0c;点击可以将隐藏的列再次展示 思路…...

学习MySQL的第十二天

夕阳西下 云霞满天 一、存储过程概述 1.1 理解 含义:存储过程的英文是 Stored Procedure。它的思想很简单,就是一组经过预先编译的SQL语句的封装。 执行过程:存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服…...

用Python做有趣的AI项目4:AI 表情识别助手

本项目将使用 计算机视觉 CNN 模型来识别人脸表情&#xff0c;例如&#xff1a; 开心 &#x1f60a; | 生气 &#x1f620; | 悲伤 &#x1f622; | 惊讶 &#x1f632; | 厌恶 &#x1f612; | 害怕 &#x1f631; | 中性 &#x1f610; &#x1f9e0; 项目目标 实时摄像头…...

2005-2020年 各省-绿色信贷水平原始数据及测算

各省-绿色信贷水平原始数据及测算&#xff08;2005-2020年&#xff09;.ziphttps://download.csdn.net/download/2401_84585615/90259771 https://download.csdn.net/download/2401_84585615/90259771 绿色信贷是指金融机构向符合环保要求的企业或项目提供的贷款&#xff0c;旨…...

STM32F103_HAL库+寄存器学习笔记21 - CAN接收过滤器:CPU减负神器,提升系统效率的第一道防线

在STM32F103的CAN总线应用中&#xff0c;硬件过滤器&#xff08;Filter&#xff09;承担着关键角色。 本章将从寄存器层面深入剖析CAN接收过滤器的工作机制与配置方法&#xff0c;帮助理解如何高效筛选关键信息&#xff0c;减轻CPU负担。 通过合理使用过滤器&#xff0c;不仅能…...

java_基础Java 转义字符学习笔记

Java 转义字符学习笔记 在Java编程中&#xff0c;转义字符用于表示那些无法直接在代码中表示的字符。以下是一些常用的Java转义字符&#xff1a; \t - 制表符&#xff1a;用于实现对齐功能。\n - 换行符&#xff1a;用于在文本中换行。\ - 反斜杠&#xff1a;表示一个反斜杠字…...

JavaScript基础(七)之web APIs

第二部分:Web APIs 目录 第二部分:Web APIs 五、DOM-节点操作 5.1 日期对象 5.1.1 实例化 5.1.2 时间对象方法 5.1.3 时间戳 5.2 节点操作 5.2.1 DOM节点 5.2.2 查找节点 父节点查找: 子节点查找: 兄弟关系查找: 5.2.3 增加节点 创建节点 5.2.4 删除节点 …...

强化学习机器人路径规划——Sparrow复现

强化学习机器人路径规划——Sparrow-v1.1复现教程 Sparrow是一个开源的移动机器人路径规划模拟器,重视模拟速度和轻量化,使用DDQN强化学习方法进行训练。本文在其基础上,增加了绘制训练曲线教程,并给出了自制地图文件,以实现在自己的地图上进行训练。 模型示意图 源码地…...

怎样给MP3音频重命名?是时候管理下电脑中的音频文件名了

在处理大量音频文件时&#xff0c;给这些文件起一个有意义的名字可以帮助我们更高效地管理和查找所需的内容。通过使用专业的文件重命名工具如简鹿文件批量重命名工具&#xff0c;可以极大地简化这一过程。本文将详细介绍如何利用该工具对 MP3 音频文件进行重命名。 步骤一&am…...

【Nova UI】十二、打造组件库之按钮组件(上):迈向功能构建的关键一步

序言 在上一篇文章中&#xff0c;我们深入探索了 icon 组件从测试到全局注册的全过程&#x1f3af;&#xff0c;成功为其在项目中稳定运行筑牢了根基。此刻&#xff0c;组件库的建设之旅仍在继续&#xff0c;我们将目光聚焦于另一个关键组件 —— 按钮组件。按钮作为用户与界面…...

C++初阶-STL简介

目录 1.什么是STL 2.STL的版本 3.STL的六大组件 4.STL的重要性 4.1在笔试中 4.2在面试中 4.3.在公司中 5.如何学习STL 6.总结和之后的规划 1.什么是STL STL&#xff08;standard template library-标准模板库&#xff09;&#xff1b;是C标准库的重要组成部分&#xf…...

(最短路)洛谷 P6880 JOI2020 奥运公交 题解

题意 给定一个 n n n 点 m m m 边的有向图&#xff0c;每条边从 u u u 指向 v v v&#xff0c;经过这条边的代价为 c c c。点编号为 1 1 1 到 n n n&#xff0c;无自环。 我们可以翻转一条边&#xff0c;即让他从 u u u 指向 v v v 变为从 v v v 指向 u u u&#…...

动态规划算法题1

动态规划做题步骤 确定状态表示&#xff1a;dp表中某一个位置中的值所表示的含义就是状态表示根据状态表示推导状态转移方程&#xff1a;dp[i]等于什么状态转移方程就是什么&#xff0c;用之前或者之后的状态&#xff0c;推导出dp[i]的值初始化(防止越界)&#xff1a;根据状态…...

π0.5:带开放世界泛化的视觉-语言-动作模型

25年4月来自具身机器人创业公司 PI 公司的论文“π0.5: a Vision-Language-Action Model with Open-World Generalization”。 为了使机器人发挥作用&#xff0c;它们必须在实验室之外的现实世界中执行实际相关的任务。虽然视觉-语言-动作 (VLA) 模型在端到端机器人控制方面已…...

ESP32开发入门(四):ESP32-s3多串口开发实践

摘要 本文详细介绍ESP32-S3芯片的UART外设开发方法&#xff0c;涵盖UART0(默认调试串口)、UART1和UART2的配置与使用技巧&#xff0c;并提供完整示例代码&#xff0c;帮助开发者快速实现多设备串口通信。 一、ESP32-S3串口硬件资源 ESP32-S3芯片提供3个UART控制器&#xff1…...

树莓派学习专题<10>:使用V4L2驱动获取摄像头数据--申请和管理缓冲区

树莓派学习专题&#xff1c;10&#xff1e;&#xff1a;使用V4L2驱动获取摄像头数据--申请和管理缓冲区 1. 申请和管理缓冲区代码2. 代码解析3. 实测结果 1. 申请和管理缓冲区代码 /* 数据缓冲区 */ typedef struct tag_BufDesc {void *pvBufPtr ;size_t szBuf…...

Android10.0 Android.bp文件详解,以及内置app编写Android.bp文件

1.前言 在10.0的系统rom定制化开发中,在内置app的时候都是常用的用法,用Android.mk的常用,但是某些时候,会 使用Android.bp的方式来内置app,接下来就来使用常用的方式来写内置so aar jar等文件 2.Android.bp文件详解,以及内置app编写Android.bp文件的介绍 根据设计,An…...

git回退commit

在Git中回退提交(commit)主要有两种方法:使用 `git reset` 或 `git revert`,具体取决于是否需要保留提交历史或是否已推送到远程仓库。以下是详细步骤: 一、使用 `git reset`(适合本地未推送的提交) `git reset` 会移动分支的 HEAD 指针到指定提交,可选择是否保留修改。…...

arcpy列表函数的应用(4)

动态获取字段信息 在处理要素类或表时&#xff0c;可能需要动态获取字段信息&#xff0c;以便根据字段类型或名称进行特定操作。可以使用arcpy.ListFields()函数获取字段列表&#xff0c;并根据需要筛选字段。 示例&#xff1a; python # 获取指定要素类的所有字段 fields …...

02 业务流程架构

业务流程架构提供了自上而下的组织鸟瞰图&#xff0c;是业务流程的全景图。根据所采用的方法不同&#xff0c;有时被称为流程全景图或高层级流程图&#xff0c;提供了业务运营中所有业务流程的整体视图。 这样有助于理解企业内部各个业务流程之间的相互关系以及它们如何共同工…...

「Mac畅玩AIGC与多模态01」架构篇01 - 展示层到硬件层的架构总览

一、概述 AIGC&#xff08;AI Generated Content&#xff09;系统由多个结构层级组成&#xff0c;自上而下涵盖交互界面、API 通信、模型推理、计算框架、底层驱动与硬件支持。本篇梳理 AIGC 应用的六层体系结构&#xff0c;明确各组件在系统中的职责与上下游关系&#xff0c;…...

如何有效防止 SQL 注入攻击?

&#x1f512; 如何有效防止 SQL 注入攻击&#xff1f; SQL 注入&#xff08;SQL Injection&#xff09;是黑客通过构造恶意输入&#xff0c;篡改 SQL 查询语句的攻击方式。以下是 7 大防御策略&#xff0c;涵盖开发、测试和运维全流程。 ✅ 1. 使用参数化查询&#xff08;Pre…...

路由交换网络专题 | 第九章 | NAT地址转换 | NAT回流

拓扑图 &#xff08;1&#xff09;配置实现内网用户可以通过 NAT 转换地址访问外网。 // 配置一条静态路由通往PC2 [AR1]ip route-static 0.0.0.0 0 60.1.1.10 // 配置ACL匹配网段 [AR1]acl 2000 [AR1-acl-basic-2000]rule permit source 192.168.1.10 0.0.0.0 // 设置地址池(不…...

DFPatternFunctor遍历计算图

文件&#xff1a;include/tvm/relay/dataflow_pattern_functor.h 功能&#xff1a;定义 DFPatternFunctor 基类&#xff0c;为 DFPattern 提供访问者模式(Visitor Pattern)的实现框架&#xff0c;支持对不同类型的模式节点进行差异化处理。 继承关系&#xff1a; template &…...

Spring Boot中@RequestParam、@RequestBody、@PathVariable的区别与使用

Spring Boot中RequestParam、RequestBody、PathVariable的区别与使用 前言 在当今的Web开发领域&#xff0c;Spring Boot凭借其简洁、高效和强大的功能&#xff0c;成为了Java开发者构建Web应用的首选框架。在开发过程中&#xff0c;处理来自客户端的请求参数是一项常见且关键…...

大模型 SFT 中的关键技术总结学习

文章目录 微调策略LoRA 微调核心思想具体实现过程超参数与技巧实现步骤​ QLoRA 相关技术1. 核心原理2. 技术优势​3. 实现流程​4. 应用场景​ P-tuning核心思想关键技术点训练流程优点应用场景 P-tuning v2Prefix Tuning一、关键概念前缀&#xff08;Prefix&#xff09;虚拟标…...

AI如何重塑DDoS防护行业?六大变革与未来展望

一、AI驱动的攻击与防御&#xff1a;攻防博弈的全面升级 AI技术的引入使DDoS攻防进入“智能对抗”时代&#xff0c;攻击者与防御方均借助AI提升效率&#xff0c;形成新的技术平衡。 1. 攻击端&#xff1a;AI赋能攻击的智能进化 动态流量生成&#xff1a;攻击者利用生成对抗网…...

电池的寿命

思路&#xff1a; 首先&#xff0c;我们观察发现&#xff1a;由于每枚电池的使用时间不同&#xff0c;而我们又要减少浪费才能使所有电池加起来用得最久&#xff0c;不难发现&#xff1a;当n2时&#xff0c;输出较小值。 第一步&#xff1a;将电池分为两组&#xff0c;使两组…...

Android完整开发环境搭建/Studio安装/NDK/本地Gradle下载配置/创建AVD/运行一个Android项目/常用插件

目录 安装Android Studio 修改sdk位置 配置 HTTP 代理 安装 NDK 设置快捷键 Gradle 说明 setting.gradle init.gradle build.gradle 下载 相关设置 创建项目 阿里云加速 清理缓存并同步 创建AVD 实用插件 ADB Idea Android Drawable Importer GsonFormat …...

【KWDB 创作者计划】_KWDB引领数据库技术革新的璀璨之星

【KWDB 创作者计划】_KWDB引领数据库技术革新的璀璨之星 &#x1f31f;嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 在当今数字化浪潮汹涌澎湃的时代&…...

设计模式--桥接模式详解

桥接模式&#xff08;bridge pattern&#xff09; 桥接模式时将抽象部分与它的实现部分分离&#xff0c;使他们可以独立的变化。它是一种对象结构型模式&#xff0c;又称为柄体&#xff08;Handle and Body&#xff09;模式或者接口&#xff08;interface&#xff09;模式&…...

Python+Selenium+Pytest+Allure PO模式UI自动化框架

一、框架结构 allure-report&#xff1a;测试报告base&#xff1a;定位元素封装data&#xff1a;数据log&#xff1a;日志文件page&#xff1a;页面封装文件夹report&#xff1a;缓存报告testcases&#xff1a;测试用例层utils&#xff1a;工具类run.py&#xff1a;执行文件 二…...

【C语言操作符详解(一)】--进制转换,原反补码,移位操作符,位操作符,逗号表达式,下标访问及函数调用操作符

目录 一.操作符的分类 二.二进制和进制转换 2.1--2进制转10进制 ​编辑 2.1.1--10进制转2进制数字 2.2--2进制转8进制和16进制 2.2.1--2进制转8进制 2.2.2--2进制转16进制 三.原码&#xff0c;反码&#xff0c;补码 四.移位操作符 4.1--左移操作符 4.2--右移操作符…...

回顾|Apache Cloudberry™ (Incubating) Meetup·2025 杭州站

2025 年 4 月 19 日&#xff0c;由酷克数据与中启乘数联合举办的 Apache Cloudberry™ (Incubating) Meetup 杭州站在浙江省杭州市滨江区滨江会展中心成功举办。本次活动邀请了 Cloudberry PPMC 团队成员、活跃内核贡献者以及中兴 EBASE-A、阿里云 ADB-PG、网易、中启乘数等多…...

使用 Autofac 实现依赖注入

前言&#xff1a;接上一篇文章&#xff0c;有了微软官方的依赖注入组件Microsoft.Extensions.DependencyInjection&#xff0c; 那么今天介绍一个新的开源的依赖注入组件Autofac 一、二者的差异Autofac和微软官方的依赖注入组件&#xff08;Microsoft.Extensions.DependencyIn…...

HTTP:十二.HTTPS

HTTPS 概述 超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用TLS加密数据包。 HTTPS的主要目的是提供对网站服务器…...

《代码整洁之道》第12章 迭进 - 笔记

好的设计是如何形成的&#xff1f; 章节核心&#xff1a; 好的软件设计不是完全靠前期庞大的设计方案来完成的&#xff0c;而更多地是在持续的编码、测试和重构过程中&#xff0c;“涌现”或“演进”出来的。 设计不是一次性的前期活动 大白话&#xff1a; 作者认为&#x…...