sqlserver alwayson部署文档手册

news2024/11/27 4:22:23

1、ALWAYSON概述

详细介绍参照官网详细文档,我就不在这里赘述了:

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server?view=sql-server-ver16

下图显示的是一个包含一个主要副本和四个次要副本的可用性组。支持最多八个次要副本,包括一个主要副本和四个同步提交次要副本。

图片

2、安装部署过程记录

为了部署方便,我以接下来的部署中,关闭了所有服务器的windows主机防火墙。

开始菜单—>管理工具—>高级安全 Windows 防火墙。右键属性。

图片

关闭包括“域配置文件”、“专用置文件”、“公用置文件”中的防火墙设置。

图片

图片

图片

如果是安全要求较高的生产环境,注意打开防火墙配置,并配置打开域间通通讯策略,具体开放端口参照微软官方文档:

https://learn.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd772723(v=ws.10)?redirectedfrom=MSDN

准备基础环境

1、操作系统Windows均为Windows server 2012R2标准版

2、数据库版本为sql server 2016 企业版本

3、各节点基本 配置如下表:

AD域

控制器/DNS

SQL节点1

SQL节点2

SQL节点3

硬件配置

4VCPU

8G内存

80G磁盘

1块网卡

4VCPU

16G内存

300G磁盘

2块网卡

4VCPU

16G内存

300G磁盘

2块网卡

4VCPU

16G内存

300G磁盘

2块网卡

主机IP

192.168.0.111

192.168.0.112

1.1.1.112

192.168.0.113

1.1.1.113

192.168.0.114

1.1.1.114

主机网关

192.168.0.1

192.168.0.1

192.168.0.1

192.168.0.1

主机DNS

192.168.0.111

192.168.0.111

192.168.0.111

192.168.0.111

CLUSER-VIP

192.168.0.200

Sql 监听器IP

192.168.0.202

4、分别到每台主机上执行whoadmi /user确认SID值。

图片

图片

图片

图片

注意4台主机的用户SID不能一样(虚拟化中克隆主机SID可能相同),因为要加域环境,如果都是克隆的同一台虚拟机需要手动sysprep修改下SID,修改方法进入c:\windows\system32\sysprep目录下运行sysprep.exe修改一下(需要重启主机)。

部署流程图

图片

2.1、部署域控制器

在192.168.0.111主机运行服务器管理器,选择本地服务器、管理、添加角色和功能

图片

图片

图片

图片

图片

图片

图片

图片

安装完成后,点击下图“将此服务器提升为域控制器”

图片

图片

图片

图片

图片

图片

图片

图片

安装完毕后,主机会自动重启。

之后登录需要使用administrator@sqlnet.com做为用户名

2.2、SQL节点主机加域

配置私有IP的做为心跳网络的网卡,取消DNS注册,并禁用netbios

图片

图片

测评ping域名sqlnet是否可以正常解析

图片

可以的话,进行加域

图片

图片

输入192.168.0.111的主机域管理员密码进行验证

加域成功后,需要重启服务器。

图片

重复以上操作,分别把3个节点都加入到域环境。

2.3、安装SQLserver2016

说明一下,SQLserver2016的安装DVD包里没有管理工具,需要单独下载安装。

https://learn.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms?redirectedfrom=MSDN&view=sql-server-ver16

另外需要.net安装包

https://support.microsoft.com/zh-cn/topic/%E9%80%82%E7%94%A8%E4%BA%8E-windows-%E7%9A%84-microsoft-net-framework-4-8-%E8%84%B1%E6%9C%BA%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F-9d23f658-3b97-68ab-d013-aa3c3e7495e0

图片

数据库服务器安装部分内容如下:

使用域管理员administrator@sqlnet.com登录服务器,进行安装

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

 2.4、安装故障转移集群

安装需要在各个节点进行安装,域控服务器不需要安装。

图片

图片

图片

图片

图片

图片

图片

图片

2.5、配置故障转移集群

打开windows窗口管理工具故障转移群集管理器

图片

图片

输入3个节点名称

图片

图片

图片

测试无错误即可,对于相关的报警可以行查看。

图片

图片

图片

图片

图片

查看sql01节点己启动CLUSTERVIP

图片

继续为集群添加仲裁见证,这里采用共享文件夹的方式来进行,共享文件夹创建在域控制器主机中。

在192.168.0.111主机C盘创建votedisk目录,右键属性

图片

图片

图片

在192.168.0.112 SQL01主机上,打开故障转移集群,右键集群,更多操作,配置集群仲裁设置

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

2.6、打开sqlserver alwayson

运行SQL配置管理器

图片

图片

勾选启动alwayson

图片

图片

之后重启sqlserver服务生效。依次修改其它节点。

修改之后连上各个数据库节点,右键属性,查看HADR是否为true。

图片

2.7、配置sqlserver alwayson

在sql01主机上创建备份目录,并共享该目录,对现有数据库进行备份。

图片

任务-备份

图片

先删除默认的备份位置,再添加

图片

图片

图片

图片

图片

新建可用性组向导

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

添加监听器

图片

图片

图片

配置完成后查看sql01节点增加监听IP

图片

图片

图片

图片

图片

3、FAQ相关

3.1、关于监听器不能实现自动读写负载均衡

监听器读写默认只连接到主副本,

要想实现读写分离,需要配置客户端连接串时写applicatiopn=readonly

同时配置只读路由,监听器会根据配置转发到只读副本

官方文档描述:

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/about-client-connection-access-to-availability-replicas-sql-server?view=sql-server-ver16

以下摘取自原文:

默认情况下,可用性组侦听器将传入连接定向到主副本。不过,您可以对可用性组进行配置以便支持只读路由,这使其可用性组侦听器能够将读意向应用程序的连接请求重定向到可读取的辅助副本。

在故障转移期间,辅助副本转换为主角色,以前的主副本转换为辅助角色。在故障转移过程中,所有到主副本或辅助副本的客户端连接都将终止。故障转移之后,在将客户端重新连接到可用性组侦听器时,侦听器将客户端重新连接到新的主副本,只有读意向连接请求除外。如果在承载新的主副本以及至少一个可读取辅助副本的客户端和服务器实例上配置了只读路由,则读意向连接请求将被重新路由到支持客户端要求的连接访问类型的辅助副本。若要确保在故障转移之后获得良好的客户端体验,务必为每个可用性副本的辅助角色和主角色配置连接访问。

连接访问配置如何影响客户端连接:

副本的连接访问设置决定连接尝试是失败还是成功。下表简要说明对于每个连接访问设置,给定连接尝试是失败还是成功。

副本角色

副本上支持的连接访问

连接意向

连接尝试结果

辅助副本

全部

指定了读意向、读写意向或未指定连接意向

成功

辅助副本

无(这是默认辅助行为。)

指定了读意向、读写意向或未指定连接意向

失败

辅助副本

仅限读意向

读意向

成功

辅助副本

仅限读意向

指定了读写意向或未指定连接意向

失败

主要

所有(这是默认主要行为。)

指定了只读意向、读写意向或未指定连接意向

成功

主要

读写

仅限读意向

失败

主要

读写

指定了读写意向或未指定连接意向

成功

针对客户端连接字符串的要求和建议

对于要使用只读路由的客户端应用程序,其连接字符串必须满足以下要求:

  • 使用 TCP 协议。

  • 将应用程序意向特性/属性设置为只读。

  • 引用配置为支持只读路由的可用性组的侦听器。

  • 引用该可用性组中的数据库。

此外,建议连接字符串启用多子网故障转移,这将支持每个子网上的每个副本的并行客户端线程。这将最大程度地减小故障转移后的客户端重新连接时间。

连接字符串的语法取决于应用程序正在使用的 SQL Server 提供程序。以下用于 SQL Server 的 .NET Framework 数据访问接口 4.0.2 的示例连接字符串说明了使用只读路由时所需的和建议的连接字符串的部分。

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True

3.2、关于监听器读负载均衡支持

官方说法是默认SQL2016以前的版本只读第1条只读路由

SQL2016以后版本可以在括号内写多个路由,自动实现读负载均衡

官方文档描述:

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server?view=sql-server-ver16

以下摘取自原文:

从 SQL Server 2016 (13.x)开始,可以在一组只读副本间配置负载平衡。以前,只读路由始终都将流量定向到路由列表中第一个可用的副本。若要利用此功能,请使用一个级别的嵌套括号将 CREATE AVAILABILITY GROUP 或 ALTER AVAILABILITY GROUP 命令中的 READ_ONLY_ROUTING_LIST 服务器实例括起来。

例如,以下路由列表在两个只读副本 Server1 和 Server2之间的读意向连接请求实现负载平衡。括住这些服务器的嵌套圆括号可以标识已实现负载平衡的组。如果该组中没有副本,则它将继续尝试按顺序连接到只读路由列表中的其他副本:Server3 和 Server4。

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')

请注意,路由列表中的每项本身也可以是一组负载平衡的只读副本。下面的示例演示这一操作。

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')

示例:

以下示例将修改现有可用性组 AG1 的两个可用性副本以支持只读路由(如果其中一个副本拥有主角色)。为了标识承载可用性副本的服务器实例,此示例指定了实例名称 COMPUTER01 和 COMPUTER02。

ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER01' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER01' WITH(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));

ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER02' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER02' WITH(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));

ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER01' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));

ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER02' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));GO

3.3、关于监听器相关参数配置实验证录

①配置A副本的只读路由属性(ReadOnly代表‘只读意向’)

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));

②配置A副本的只读路由URL

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'tcp://WIN-14VNU7CGQO1.fnst.com:1433'));

③配置B副本的只读路由属性

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));

④配置B副本的只读路由URL

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'tcp://WIN-14VNU7CGQO2.fnst.com:1433'));

⑤配置A副本作为主副本时候的只读路由表

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO1' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('WIN-14VNU7CGQO2','WIN-14VNU7CGQO1')));

⑥配置B副本作为主副本时候的只读路由表

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('WIN-14VNU7CGQO1','WIN-14VNU7CGQO2')));

 配置完成后,使用如下SQL查看路由表 

SELECT * FROM sys.availability_read_only_routing_lists 

图片

确认一下应该是下面的形式 :

A    B

A    A

B    A

B    B

为什么这么配置请分析如下过程
1.正常运行时候,A作为主副本,B作为辅助副本,客户端连接字符串指定数据源是侦听器地址
2.此时发送只读请求
3.侦听器收到只读数据请求,有主副本A来处理,主副本A发现是ReadOnly,就查询路由表,发现第一条符合,就把只读请求交给辅助副本B来处理
4.此时主副本A失效了,那么由AlwaysOn的高可用可知,会让辅助B作为了主副本,等原来的主副本A恢复之后,让A成为新的辅助副本(当然这些对客户端是透明的)
5.副本A恢复之后,再发送一条只读请求
6.此时侦听器使用主副本B来处理这个请求,如果不像上面的设置方法,就找不到B到A的路由,也就不能实现所谓的高可用

经过上面的12次测试连接监听器IP,进行一下总结:

No.

主角色中的连接

可读辅助角色

客户端行为

读请求

写请求

1

允许所有

不设置ReadOnly

主副本

主副本

2

允许所有

仅读意向

不设置ReadOnly

主副本

主副本

3

允许所有

不设置ReadOnly

主副本

主副本

4

允许所有

设置ReadOnly

主副本

主副本

5

允许所有

仅读意向

设置ReadOnly

辅助副本

异常

6

允许所有

设置ReadOnly

辅助副本

异常

7

允许读写

不设置ReadOnly

主副本

主副本

8

允许读写

仅读意向

不设置ReadOnly

主副本

主副本

9

允许读写

不设置ReadOnly

主副本

主副本

10

允许读写

设置ReadOnly

异常

异常

11

允许读写

仅读意向

设置ReadOnly

辅助副本

异常

12

允许读写

设置ReadOnly

辅助副本

异常

结论一:客户端配置ApplicationIntent=ReadOnly;启用只读路由功能,所有的请求先交给辅助副本来处理

结论二:客户端不配置ApplicationIntent=ReadOnly;那么读和写请求处理,都是主副本进行处理的,如1、2、3、7、8、9

结论三:在4中,主副本处理只读请求先交给辅助路由,因为所有的辅助副本都是不可写的,所以再由自己来处理只读路由

    在10中,所有的辅助副本都是不可写,但是主副本又不处理ReadOnly的请求,所以就异常了

3.4、连接到 Always On 可用性组侦听器相关说明

官方链接:

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/listeners-client-connectivity-application-failover?view=sql-server-ver16

连接到主要副本

在连接字符串中指定可用性组侦听器 DNS 名称,可连接到主要副本以进行读写访问。

例如,若要通过侦听器连接到 SQL Server Management Studio 中的主要副本,请在服务器名称字段中输入侦听器 DNS 名称:

图片

在故障转移期间,当主要副本变化时,与侦听器的现有连接将会断开,新的连接将路由到新的主要副本。

下面是 ADO.NET 提供程序 (System.Data.SqlClient) 的基本连接字符串的一个示例:

Server=tcp: AGListener,1433;Database=MyDB;Integrated Security=SSPI

可以通过运行以下 Transact-SQL (T-SQL) 命令来验证当前通过侦听器连接到的副本:

SELECT @@SERVERNAME

例如,SQLVM1 是主要副本时:

图片

仍可使用主要副本或次要副本的实例名称(而不使用可用性组侦听器)直接连接到 SQL Server 的实例。但是,这样就无法享受将新连接自动路由到当前新主要副本的好处。此外,还无法享受只读路由的好处,即让用 read-intent 指定的连接自动路由到可读次要副本。

连接到只读副本

“只读路由”是指将传入的侦听器连接自动路由到配置为允许只读工作负荷的可读次要副本 。

如果满足以下条件,则连接将自动路由到只读副本:

至少一个次要副本设置为只读访问,并且每个只读次要副本和主要副本都配置为支持只读路由。

连接字符串引用可用性组中涉及的数据库。替代方法是连接中使用的登录帐户将该数据库配置为其默认数据库。有关详细信息,请参阅此有关如何使用算法处理只读路由的文章。

连接字符串引用某一可用性组侦听器,并且将传入连接的应用程序意向设置为只读(例如,使用 ODBC 或 OLEDB 连接字符串或连接特性或属性中的 Application Intent=ReadOnly 关键字)。

在登录期间,应用程序意向属性存储在客户端的会话中,然后 SQL Server 实例将处理该意向,并按照可用性组的配置和辅助副本中目标数据库的当前读写状态来确定执行什么操作。

例如,若要使用 SQL Server Management Studio 连接到只读副本,请选择“连接到服务器”对话框上的“选项”,选择“附加连接参数”选项卡,然后在文本框中指定 ApplicationIntent=ReadOnly :

图片

针对指定只读应用程序意向的 ADO.NET 访问接口 (System.Data.SqlClient) 的连接字符串的一个示例:

Server=tcp:AGListener;Database=AdventureWorks;Integrated Security=SSPI;ApplicationIntent=ReadOnly

有关详细信息,请参阅配置对可用性副本的只读访问 (SQL Server)

3.5、只读路由实测

图片

图片

图片

图片

附录

参考链接

https://learn.microsoft.com/zh-cn/windows-server/failover-clustering/file-share-witness

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability?view=sql-server-ver16

https://blog.csdn.net/cxu123321/article/details/108714305

https://blog.51cto.com/jimshu/1420526

https://www.cnblogs.com/DannielZhang/p/6070611.html

https://blog.csdn.net/mu_sang/article/details/129820539#:~:text=SQL%20Server%20Always%20On%E7%89%B9%E6%80%A7%E6%94%AF%E6%8C%81%20%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB%20%EF%BC%8C%E8%BF%99%E6%98%AF%E4%B8%80%E7%A7%8D%20%E6%95%B0%E6%8D%AE%E5%BA%93%20%E8%B4%9F%E8%BD%BD%E5%88%86%E6%8B%85%E7%9A%84%E6%96%B9%E5%BC%8F%EF%BC%8C%E8%83%BD%E5%A4%9F%E4%BC%98%E5%8C%96,%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB%20%E5%B0%86%E8%AF%BB%E6%93%8D%E4%BD%9C%E5%92%8C%E5%86%99%E6%93%8D%E4%BD%9C%E5%88%86%E5%88%AB%E5%88%86%E9%85%8D%E5%88%B0%E4%B8%8D%E5%90%8C%E7%9A%84%20%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9C%8D%E5%8A%A1%E5%99%A8%20%E4%B8%8A%EF%BC%8C%E4%BB%8E%E8%80%8C%E9%99%8D%E4%BD%8E%E4%BA%86%E6%AF%8F%E4%B8%AA%20%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9C%8D%E5%8A%A1%E5%99%A8%20%E7%9A%84%E8%B4%9F%E8%BD%BD%E5%92%8C%E5%8E%8B%E5%8A%9B%EF%BC%8C%E6%8F%90%E9%AB%98%E4%BA%86%E6%95%B4%E4%B8%AA%20%E6%95%B0%E6%8D%AE%E5%BA%93%20%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%93%8D%E5%BA%94%E9%80%9F%E5%BA%A6%E3%80%82

 

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

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

相关文章

Docker部署Grafana+Promethus监控Mysql和服务器

一、Grafana部署所需资源 Grafana 需要最少的系统资源: 建议的最小内存:512 MB建议的最低 CPU:1 官方文档:https://grafana.com/docs/grafana/latest/getting-started/build-first-dashboard/ 可以看到,我的这台服务…

探索前端开发框架:React、Angular 和 Vue 的对决(三)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

mysql:事务的特性ACID、并发事务(脏读、不可重复读、幻读、如何解决、隔离级别)、undo log和redo log的区别、相关面试题和答案

事务是一组操作的集合,它会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务的特性(ACID) 原子性(Atomicity):事务是不可分割的…

QT中,对于大小端UDP网络发送的demo,帧头帧尾

简单demo: 发送端&#xff1a; #include <QUdpSocket> #include <QtEndian>#pragma pack(1) struct Test {unsigned char t1:1;unsigned char t2:2;unsigned char t3:3;unsigned char t4:2;quint8 a 1;quint16 b 2;quint16 c 3;//double b …

Sqli靶场23-->30

不知不觉鸽了几天了&#xff0c;没办法去旅游摸鱼是这样的了&#xff0c;抓紧时间来小更一下 23.过滤注释符号 先手工注入一下&#xff0c;就能发现两个单引号不报错&#xff0c;但是一旦上到注释符号的话就会报错&#xff0c;可以猜测出是对注释符号进行了过滤&#xff0c;我…

华为配置OSPF与BFD联动示例

配置OSPF与BFD联动示例 组网图形 图1 配置OSPF与BFD联动组网图 OSPF与BFD联动简介配置注意事项组网需求配置思路操作步骤配置文件 OSPF与BFD联动简介 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种用于检测转发引擎之间通信故障的检测…

深度学习系列56:使用whisper进行语音转文字

1. openai-whisper 这应该是最快的使用方式了。安装pip install -U openai-whisper&#xff0c;接着安装ffmpeg&#xff0c;随后就可以使用了。模型清单如下&#xff1a; 第一种方式&#xff0c;使用命令行&#xff1a; whisper japanese.wav --language Japanese --model…

目标检测任务的调研与概述

目标检测任务的调研与概述 0 FQA1 目标检测任务基本知识&#xff1a;1.1 什么是目标检测&#xff1f;1.2 目标检测的损失函数都有那些&#xff1f;1.2.1 类别损失&#xff1a;1.2.2 位置损失&#xff1a; 1.3 目标检测的评价指标都有那些&#xff1f;1.4 目标检测有那些常见的数…

移动云ONAIR媒体云全解读!媒体内容数字化融合一站式解决方案

当下&#xff0c;传统媒体面临着诸多挑战&#xff0c;如何利用信息技术提升内容的质量、形式和分发效率&#xff0c;成为媒体行业的迫切需求。移动云作为数字中国建设的“主力军”&#xff0c; 立足于新兴媒体与云计算市场的变化与需求&#xff0c;推出了ONAIR 媒体云解决方案&…

Redis核心技术与实战【学习笔记】 - 20.Redis原子操作及并发访问

概述 使用 Redis 时&#xff0c;不可避免地会遇到并发访问的问题&#xff0c;比如说如果多个用户同时下单&#xff0c;就会对缓存在 Redis 中的商品库存并发更新。一旦有了并发写操作&#xff0c;数据就会被修改&#xff0c;如果我们没有对并发写请求做好控制&#xff0c;就可…

机器学习中的有监督学习和无监督学习

有监督学习 简单来说&#xff0c;就是人教会计算机学会做一件事。 给算法一个数据集&#xff0c;其中数据集中包含了正确答案&#xff0c;根据这个数据集&#xff0c;可以对额外的数据希望得到一个正确判断&#xff08;详见下面的例子&#xff09; 回归问题 例如现在有一个…

套路化编程 C# winform 自适应缩放布局

本例程实现基本的自适应缩放布局。 在本例程中你将会学习到如何通过鼠标改变界面比例&#xff08;SplitContainer&#xff09;、如何使用流布局&#xff08;FlowLayoutPanel&#xff09;排列控件&#xff0c;当然首先需要了解如何设置控件随窗口缩放。 目录 创建项目 ​编辑…

【npm】安装全局包,使用时提示:不是内部或外部命令,也不是可运行的程序或批处理文件

问题 如图&#xff0c;明明安装Vue是全局包&#xff0c;但是使用时却提示&#xff1a; 解决办法 使用以下命令任意一种命令查看全局包的配置路径 npm root -g 然后将此路径&#xff08;不包括node_modules&#xff09;添加到环境变量中去&#xff0c;这里注意&#xff0c;原…

101 C++内存高级话题 内存池概念,代码实现和详细分析

零 为什么要用内存池&#xff1f; 从前面的知识我们知道&#xff0c;当new 或者 malloc 的时候&#xff0c;假设您想要malloc 10个字节&#xff0c; char * pchar new char[10]; char *pchar1 malloc(10); 实际上编译器为了 记录和管理这些数据&#xff0c;做了不少事情&…

全自动网页生成系统重构版源码

全自动网页生成系统重构版源码分享&#xff0c;所有模板经过精心审核与修改&#xff0c;完美兼容小屏手机大屏手机&#xff0c;以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 为用户使用方便考虑&#xff0c;全自动网页制作系统无需繁琐的注…

陶哲轩如何用 GPT-4 辅助数学研究

关于陶哲轩&#xff08;Terence Tao&#xff09;用 GPT-4 进行数学研究的话题始于陶本人在 微软 Unlocked 上发表的 Embracing Change and Resetting Expectations 一文。文中提到&#xff1a; …… I could feed GPT-4 the first few PDF pages of a recent math preprint and…

Vue3动态CSS

Vue3动态CSS 动态css值动态css对象module模式 动态css值 <template><div class"div">动态css</div> </template><script setup langts> import {ref} from vueconst style ref(blue) </script><style scoped> .div{colo…

绕过无限debugger

目标网站 aHR0cHM6Ly93d3cuaWMubmV0LmNuL3NlYXJjaC81NTAuaHRtbA 改为Firefox浏览器进行调试,取消勾选 Pause on debugger statement 参考:https://blog.csdn.net/kdl_csdn/article/details/135137490

MySQL进阶之锁(表级锁,元数据锁,意向锁)

表级锁 介绍 表级锁&#xff0c;每次操作锁住整张表。锁定粒度大&#xff0c;发生锁冲突的概率最高&#xff0c;并发度最低。应用在MyISAM、 InnoDB、BDB等存储引擎中。 对于表级锁&#xff0c;主要分为以下三类&#xff1a; 表锁 元数据锁&#xff08;meta data lock&…

算法笔记刷题日记——3.简单入门模拟 3.1简单模拟

刷题日记 3.1 简单模拟 此类题型根据题目描述进行代码的编写&#xff0c;考察代码能力&#xff0c;刷题记录如下&#xff1a; B1001 B1032 B1016 B1026 B1046 B1008 B1012 B1018 A1042 A1046 A1065 B1010 A1002 A1009 错题记录 B1008 数组元素循环右移问题 一个数组_A_中存有…