非关系型数据库-----------Redis的主从复制、哨兵模式

目录

一、redis群集有三种模式

1.1主从复制、哨兵、集群的区别

1.1.1主从复制

1.1.2哨兵

1.1.3集群

二、主从复制

2.1主从复制概述

2.2主从复制的作用

①数据冗余

②故障恢复

③负载均衡

④高可用基石

2.3主从复制流程

2.4搭建redis主从复制

2.4.1环境准备

2.4.2三台机器都安装redis

2.4.3修改 Redis 配置文件(Master节点操作)

2.4.4修改Redis配置文件(slave节点操作)

2.4.5验证主从效果

2.4.5.1在Master节点上看日志

2.4.5.2在Master节点上验证从节点

2.4.5.3在master节点上添加数据 从节点查看

三、Redis哨兵模式

3.1Redis哨兵模式概述

3.2哨兵模式原理

3.3哨兵模式的作用

3.3.1监控

3.3.2自动故障转移

3.3.3通知(提醒)

3.4哨兵结构由两部分组成,哨兵节点和数据节点:

3.5故障转移机制 (哨兵的原理)

1) 主观下线

2) 客观下线

3) 投票选举

3.5.1主节点的选举:

3.6搭建redis哨兵模式

3.6.1修改 Redis 哨兵模式的配置文件(所有节点都要操作)

3.6.2启动哨兵模式

3.6.3查看哨兵信息

3.6.4故障模拟

3.6.4.1去master查看进程号

3.6.4.2杀死 Master 节点上redis-server的进程号

3.6.5验证结果


一、redis群集有三种模式

redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster

1.1主从复制、哨兵、集群的区别

1.1.1主从复制

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

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

缺陷:

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

1.1.2哨兵

哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复

缺陷

  • 写操作无法负载均衡;
  • 存储能力受到单机的限制;
  • 哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

1.1.3集群

集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案

但是,成本比较高,通常至少三主三从,六台起步,成本比较高!!

二、主从复制

2.1主从复制概述

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器,前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点

2.2主从复制的作用

①数据冗余

主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

②故障恢复

当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余

③负载均衡

在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;

尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

④高可用基石

除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

2.3主从复制原理

(1)若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。

(2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

(3)后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。

(4)Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

1、从节点给主节点发送sync命令,主节点则通过bgsave命令生成RDB快照文件,然后将其文件传给从节点,之后的写操作都记录在缓冲区;
2、从节点收到快照文件后执行保存到数据集中,然后再次给主发送psync命令,获取缓冲区的数据;
3、主节点发送缓冲区的写操作,从节点执行同步到数据集中,此时完成主从数据一致;
4、后续从节点会持续监测主,主节点也会定时给从节点发送写操作,从节点同步执行,实现主从数据一致;注意:从节点首次同步以及宕机恢复都需要执行一次全量数据加载,即全量备份

sync同步 RDB(完全备份文件)给从服务器 

              AOF(增量备份)给从服务器 

主从复制过程/原理:

①从---->主发送sync同步数据请求
②主redis 会fork一个子进程,然后会产生RDB文件(完全备份的文件)的过程

2.1 客户端还在持续的写入redis
③rdb文件 持久化完成后,主redis会将RDB文件和缓存起来的命令推送给我们的从服务器
④复制、推送完后,主reids 会持续的同步操作命----->利用AOF(增备)主持久化功能
⑤在下一台redis 接入主从复制之前,会持续利用AOF的方式 同步数据给从服务器

2.4搭建redis主从复制

下载安装包的链接:

https://download.redis.io/releases/

2.4.1环境准备

主机操作系统  IP地址 软件 / 安装包 / 工具
MasterCentOS7192.168.246.8 redis-5.0.7.tar.gz
Slave1  CentOS7192.168.246.9 redis-5.0.7.tar.gz
Slave2CentOS7192.168.246.10 redis-5.0.7.tar.gz

关闭防火墙、防护

systemctl stop firewalld
setenforce 0

2.4.2三台机器都安装redis

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install gcc gcc-c++ make -y
[root@localhost ~]#cd /opt
[root@localhost opt]#ls
rh
[root@localhost opt]#rz -E
rz waiting to receive.
[root@localhost opt]#ls
redis-5.0.7.tar.gz  rh
[root@localhost opt]#tar xf redis-5.0.7.tar.gz 
[root@localhost opt]#ls
redis-5.0.7  redis-5.0.7.tar.gz  rh
[root@localhost opt]#cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]#make -j 4
[root@localhost redis-5.0.7]#make prefix=/usr/local/redis install
[root@localhost redis-5.0.7]#cd /opt/redis-5.0.7/utils/
[root@localhost utils]#./install_server.shPlease select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server
[root@localhost utils]#ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@localhost utils]#/etc/init.d/redis_6379 start
/var/run/redis_6379.pid exists, process is already running or crashed
[root@localhost utils]#netstat -natp|grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      6447/redis-server 1 
[root@localhost utils]#netstat -natp|grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      6447/redis-server 1 
[root@localhost utils]#
​​​​​​​[root@localhost ~]#yum install gcc gcc-c++ make -y

修改下主机名,好区分

2.4.3修改 Redis 配置文件(Master节点操作)

​vim /etc/redis/6379.confbind 0.0.0.0                     #70行,修改监听地址为0.0.0.0
daemontze yes                    #137行,开启守护进程
logfile/var/log/redis_6379.1og   #172行,指定日志文件目录
dir/var/lib/redis/6379           #264行,指定工作目录
appendonly yes                   #700行,开启AOF持久化功能
----------------------------------------
/etc/init.d/redis_6379 restart

2.4.4修改Redis配置文件(slave节点操作)

vim /etc/redis/6379.confbind 0.0.0.0						#70行,修改监听地址为0.0.0.0
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录		
replicaof 192.168.246.8 6379        #288行,指定要同步的Master节点IP和端口
appendonly yes						#700行,开启AOF持久化功能
------------------------------------/etc/init.d/redis_6379 restart

slave2配置:

由于配置一样,我们先备份下slave2配置文件,从slave1直接远程拷贝过去到slave2,再去查看下,是否正确

2.4.5验证主从效果

2.4.5.1在Master节点上看日志
[root@master_redis ~]#tail -f /var/log/redis_6379.log

两个从同步成功

2.4.5.2在Master节点上验证从节点
redis-cli info replication

2.4.5.3在master节点上添加数据 从节点查看

三、Redis哨兵模式

3.1Redis哨兵模式概述

主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。

哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移

3.2哨兵模式原理

哨兵(sentinel):是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master并将所有slave连接到新的 Master

所以整个运行哨兵的集群的数量不得少于3个节点

3.3哨兵模式的作用

3.3.1监控

哨兵会不断地检查主节点和从节点是否运作正常、还有哨兵节点是否运作正常。

3.3.2自动故障转移

当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。

3.3.3通知(提醒)

哨兵可以将故障转移的结果发送给客户端。

3.4哨兵结构由两部分组成,哨兵节点和数据节点:

  • 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
  • 数据节点:主节点和从节点都是数据节点。

3.5故障转移机制 (哨兵的原理)

1.由哨兵节点定期监控发现主节点是否出现了故障

每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。

如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

2.当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。

所以整个运行哨兵的集群的数量不得少于3个节点。

3.由leader哨兵节点执行故障转移,过程如下:

  • 将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;
  • 若原主节点恢复也变成从节点,并指向新的主节点;
  • 通知客户端主节点已经更换。

需要特别注意的是,客观下线是主节点才有的概念;

如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作。

上图所示,多个哨兵之间也存在互相监控,这就形成了多哨兵模式,现在对该模式的工作过程进行讲解,介绍如下:

1) 主观下线
主观下线,适用于主服务器和从服务器。如果在规定的时间内(配置参数:down-after-milliseconds),Sentinel 节点没有收到目标服务器的有效回复,则判定该服务器为“主观下线”。比如 Sentinel1 向主服务发送了 PING命令,在规定时间内没收到主服务器 PONG回复,则 Sentinel1 判定主服务器为“主观下线”。
2) 客观下线
客观下线,只适用于主服务器。 Sentinel1 发现主服务器出现了故障,它会通过相应的命令,询问其它 Sentinel 节点对主服务器的状态判断。如果超过半数以上的  Sentinel 节点认为主服务器 down 掉,则 Sentinel1 节点判定主服务为“客观下线”。
3) 投票选举

投票选举,所有 Sentinel 节点会通过投票机制,按照谁发现谁去处理的原则,选举 Sentinel1 为领头节点去做 Failover(故障转移)操作。Sentinel1 节点则按照一定的规则在所有从节点中选择一个最优的作为主服务器,然后通过发布订功能通知其余的从节点(slave)更改配置文件,跟随新上任的主服务器(master)。至此就完成了主从切换的操作。

对上对述过程做简单总结:

Sentinel 负责监控主从节点的“健康”状态。当主节点挂掉时,自动选择一个最优的从节点切换为主节点。客户端来连接 Redis 集群时,会首先连接 Sentinel,通过 Sentinel 来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向 Sentinel 要地址,Sentinel 会将最新的主节点地址告诉客户端。因此应用程序无需重启即可自动完成主从节点切换

①哨兵对主从复制集群进行监控     监控对象"所有redis数据节点"

②哨兵与哨兵之间进行相互监控     监控的对象: 哨兵彼此
③监控目的
3.1 哨兵与哨兵之间的监控目的:检测彼此的存活状态
3.2 哨兵监控所有的redis数据库的目的:为了实现故障自动故障切换
故障切换原理
① 当master 挂掉,哨兵会及时发现,发现之后 进行投票机制,选举出一个新的master服务器一定是基数)
② 完成salve----->master的 从向主 进行切换
③ 完成其他的从服务器对新的master配置


3.5.1主节点的选举:
  • 过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。
  • 选择配置文件中从节点优先级配置最高的(replica-priority,默认值为100)
  • 选择复制偏移量最大,也就是复制最完整的从节点。

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式

3.6搭建redis哨兵模式

环境准备:

主机操作系统  IP地址 软件 / 安装包 / 工具
Master、sentinel1CentOS7192.168.246.8 redis-5.0.7.tar.gz
Slave1、sentinel2CentOS7192.168.246.9 redis-5.0.7.tar.gz
Slave2、sentinel3CentOS7192.168.246.10 redis-5.0.7.tar.gz

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式

哨兵模式要在基于主从复制已搭建完成的前提下才可以做哦

3.6.1修改 Redis 哨兵模式的配置文件(所有节点都要操作)

vim /opt/redis-5.0.7/sentinel.conf
------------------------------------------
protected-mode no								#17行,关闭保护模式
port 26379										#21行,Redis哨兵默认的监听端口
daemonize yes									#26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log"					#36行,指定日志存放路径
dir "/var/lib/redis/6379"						#65行,指定数据库存放路径
sentinel monitor mymaster 192.168.246.8 6379 2	#84行,修改 指定该哨兵节点监控192.168.10.23:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000	#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000		#146行,故障节点的最大超时时间为180000(180秒)

可以再所有主机添加ip地址加域名,这样远程拷贝可以快一点

其他两台主机配置:/opt/redis-5.0.7/sentinel.conf

scp /opt/redis-5.0.7/sentinel.conf 192.168.246.9:/opt/redis-5.0.7/sentinel.conf
scp /opt/redis-5.0.7/sentinel.conf 192.168.246.10:/opt/redis-5.0.7/sentinel.conf

3.6.2启动哨兵模式

先启master,再启slave

先启master,再启slavecd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

3.6.3查看哨兵信息

redis-cli -p 26379 info sentinel

3.6.4故障模拟

3.6.4.1去master查看进程号
ps -ef|grep redisps aux|grep redis  #查看进程

3.6.4.2杀死 Master 节点上redis-server的进程号

3.6.5验证结果

①在哨兵节点上验证master是否转换至从服务器 

tail -f /var/log/sentinel.log

再次查看哨兵信息:

②在哨兵节点上再次查看哨兵信息,查看是否转换成功

redis-cli -p 26379 info sentinel

总结

1、主从复制

redis主从复制 是为了数据冗余和读写分离

在这两种模式中,有两种角色主节点(master)和从节点(slave),主节点负责处理写的操作

并将数据更改复制到一个或多个从节点。

这样我们的主节点负载减轻,从节点可以提供数据读取服务,实现读写分离,如果主节点停止服务,从节点之一可以立即接管主节点的角色,再继续提供服务


具体流程如下:

1、从节点启动成功连接主节点后,发送一个sync命令

2、主节点接受到sync的命令后开始在后台保存快照,同时,它也开始记录接收到rsnc后所有执行写的命令,快照完成后会将这个快照文件发送给从节点。

3、从节点收到快照文件之后开始载入,并持续接受主节点发送过来的新的写命令执行

总的来说 通过主从复制,redis 能够实现数据的备份(master 产生的数据能slave备份),负责均衡(读操作可以分摊到slave上去)和高可用(master宕机后,可以由slave进行故障切换)


2、redis  哨兵机制

哨兵是一个高可用的行解决方案 官方认可 默认模式

1、监控:redis 哨兵 会持续监控master和slave实例是否正常运行

2、通知:如某个redis实例有问题,哨兵可以通过API向管理员或者其他应用发信通知

3、自动故障转移:如果master节点不工作,哨兵会开始故障转移的过程,选择一个slave节点晋升为新的master,其他剩余slave的节点会被重新配置为新的master节点的slave

4、配置提供服务:客户端可以使用哨兵来查询被认证的master节点该master节点的目录所有的slave节点


redis 哨兵是一个用于管理多个reids服务的系统,它提供监控、通知、自动故障转移、配置提供服务的功能,以实现redis高可用性

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementui 左侧或水平导航菜单栏与main区域联动

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、elementui 左侧导航菜单栏与main区域联动 三、elementui 中设置图片的高度并支持PC和手机自适应 四、elementui 实现一个固定位置的Pagination(分页)组件 文章目录 系列文章目录…

配置zookeeper的时候三个节点都启动了但是查询zookeeper的角色的时候显示没启动成功

场景 搭建了一个音乐平台数仓,一共有五个节点,其中三个节点配置zookeeper,我的操作是先把这三个节点的zookeeper全部启动,然后再分别查询各自zookeeper的角色。出现了一下问题: Error contacting service. It is proba…

【Java】:继承

目录 1.为什么需要继承 2.继承的概念 3.继承的语法 4.父类成员访问 4.1子类和父类不存在同名成员变量 1.子类和父类不存在同名成员变量 2.子类和父类成员变量同名 4.2子类中访问父类的成员方法 1.成员方法名字不同 2.成员方法名字相同 5.super关键字 6.子类构造方法 …

CTF下加载CTFtraining题库以管理员身份导入 [HCTF 2018]WarmUp,之后以参赛者身份完成解题全过程

-------------------搭建CTFd------------------------------ 给大家介绍一个本地搭建比较好用的CTF比赛平台:CTFD。 CTFd是一个Capture The Flag框架,侧重于易用性和可定制性。它提供了运行CTF所需的一切,并且可以使用插件和主题轻松进行自…

212 基于matlab的双稳态随机共振的算法

基于matlab的双稳态随机共振的算法,分析信噪比随系统参数a,b及乘性噪声和加性噪声的增益变化曲线,60个数据样本可供选择。程序已调通,可直接运行。 212 双稳态随机共振 信噪比增益变化曲线 - 小红书 (xiaohongshu.com)

基于java实现的弹幕视频网站

开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclip…

C++ //练习 11.3 编写你自己的单词计数程序。

C Primer(第5版) 练习 11.3 练习 11.3 编写你自己的单词计数程序。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /*************************************************************************> …

Jenkins 使用 Description Setter

想要的效果如图: 在打包完成之后直接在构件历史的部分展示出来构建的docker镜像名,这样就不需要去找日志了。 首先安装插件 Description Setter, 如何安装就不在此赘述了。 安装完成之后,在构件后操作选项添加一个流程, 有两个字段: regular expressi…

2024年 前端JavaScript 进阶 第3天 笔记

3.1-JS进阶-内容和两种编程思想 3.2-构造函数实现封装以及存在 3.3-原型对象prototype 3.4-数组扩展案例-求最大值和数组求和 3.5-constructor属性以及应用 3.6-对象原型proto 3.7-原型继承 3.8-原型链以及instanceof运算符 3.9-综合案例-模态框构造函数写法 3.10-综合案例-0pe…

Apache ECharts-数据统计(详解、入门案例)

简介:Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 1、介绍 图 1.1 Apache ECharts 功能、运行环境 功能: ECharts&#xff…

容器安全的防护之道

随着云计算的发展,云原生技术已经成为企业数字化转型的得力武器,如何保障容器安全,已成为企业最关心的问题。为此,德迅蜂巢原生安全平台由德迅云安全自主研发,能够很好集成到云原生复杂多变的环境中,如PaaS…

Ubuntu Desktop 安装有道词典

Ubuntu Desktop 安装有道词典 1. 有道词典2. Installation2.1. 解压 deb 包到 youdao 目录2.2. 解压 deb 包中的 control 信息 (包的依赖写在该文件里面)2.3. 编辑 control 文件,删除依赖里面的 gstreamer0.10-plugins-ugly2.4. 创建 youdaobuild 目录,重…

数据结构(初阶)第一节:数据结构概论

本篇文章是对数据结构概念的纯理论介绍,希望系统了解数据结构概念的友友可以看看,对概念要求不高的友友稍做了解后移步下一节: 数据结构(初阶)第二节:顺序表-CSDN博客 正文 目录 正文 1.数据结构的相关概…

AWS上面部署一台jenkins

问题 客户预算有限,需要在aws云上面搞一台EC2手动安装jenkins发版。 步骤 创建密钥对 在EC2服务里面创建密钥对,具体如下图: 设置密钥对,如下图: 保存好这个私钥文件,以便后续用这个私钥文件ssh登录j…

如何处理Flutter应用在iOS平台上的兼容性问题

大家好,我是咕噜铁蛋!今天我想和大家聊聊一个常见但令人头疼的问题——Flutter应用在iOS平台上的兼容性问题。在开发跨平台应用时,尤其是在Android和iOS两大平台上,兼容性问题总是难以避免。而Flutter,作为一个旨在解决…

力扣24. 两两交换链表中的节点

Problem: 24. 两两交换链表中的节点 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建虚拟头节点dummy和尾指针tial指向dummy;创建指针p指向head 2.当head不为空同时head -> next 不为空时: 2.1.创建指针nextP指向p -> next -> next; 2.2…

【Qt 学习笔记】认识QtSDK中的重要工具

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 认识QtSDK中的重要工具 文章编号:Qt 学习笔记 / 03 文章目…

ChatGPT全方位解析:如何培养 AI 智能对话技能?

简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达的越清晰,给到的信息越多,那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理,如果想要C…

如何在Java中,使用jackson实现json缩进美化

导入的maven依赖 <!--json--> <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.0</version> </dependency>示例代码 json要是String类型 public…

jmeter性能压测

jvm指令 jstat -gcutil -h5 -t 1 3s 发压端的tcp这么达到1000TPS jmeter的jvm的设置