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

Redis配置与优化

1 关系数据库与非关系型数据库概述

1.1 关系型数据库

一个结构化的数据库,创建在关系模型(二维表格模型)基础上
一般面向于记录
SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言
用于执行对关系型数据库中数据的检索和操作。
主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2 等。
 

1.2 非关系型数据库

  • NoSQL(NoSQL = Not Only SQL ),意思是“不仅仅是 SQL”,是非关系型数据库的总称。
  • 除了主流的关系型数据库外的数据库,都认为是非关系型。
  • 主流的 NoSQL 数据库有 Redis、MongBD、Hbase、CouhDB 等。

1.3 关系数据库与非关系型数据库区别

数据存储方式不同

关系型和非关系型数据库的主要差异是数据存储的方式。

关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。
你的数据及其特性是选择数据存储和提取方式的首要影响因素
 

扩展方式不同

SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。

要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
 

对事务性的支持不同

如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
 

1.4 非关系型数据库产生背景

可用于应对 Web2.0 纯动态网站类型的三高问题。

  • High performance——对数据库高并发读写需求
  • Huge Storage——对海量数据高效存储与访问需求
  • High Scalability && High Availability——对数据库高可扩展性与高可用性需求

2 Redis概述

2.1 Redis简介

Redis 是一个开源的、使用 C 语言编写的 NoSQL 数据库。
Redis 基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。
Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。
若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;
若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力
所以在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程。
若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。
若 CPU 资源比较紧张,采用单进程即可。
 

2,2 Redis 优点

具有极高的数据读写速度:数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到 81000 次/s。
支持丰富的数据类型:支持 key-value、Strings、Lists、Hashes、Sets 及 Ordered Sets 等数据类型操作。
支持数据的持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
原子性:Redis 所有操作都是原子性的。
支持数据备份:即 master-salve 模式的数据备份。
 

2.3 Redis使用场景

Redis作为基于内存运行的数据库,缓存是其最常应用的场景之一。除此之外,Redis常见应用场景还包括获取最新N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录。

3 Redis 安装部署

编译安装redis

cd /opt/
yum install -y gcc gcc-c++ maketar zxvf redis-5.0.7.tar.gz cd /opt/redis-5.0.7/
make && make PREFIX=/usr/local/redis install

执行软件包自带的install_server.sh脚本文件设置redid服务相关配置

cd /opt/redis-5.0.7/utils
./install_server.sh
……
慢慢回车
Please select the redis executable path []
手动输入  /usr/local/redis/bin/redis-server
#要一次性输入正确,不然还要重新执行
Selected config:
Port           : 6379								#默认侦听端口为6379
Config file    : /etc/redis/6379.conf				#配置文件路径
Log file       : /var/log/redis_6379.log			#日志文件路径
Data dir       : /var/lib/redis/6379				#数据文件路径
Executable     : /usr/local/redis/bin/redis-server	#可执行文件路径
Cli Executable : /usr/local/bin/redis-cli			#客户端命令工具

 把redis的可执行程序文件放入路径环境变量的目录中便于系统识别

ln -s /usr/local/redis/bin/* /usr/local/bin/#当install_server.sh 脚本运行完毕,Redis服务就已经启动,默认侦听端口为6379
netstat -natp | grep redis#redis服务控制
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status			#状态

修改配置 /etc/redis/6379.conf 参数

vim /etc/redis/6379.conf#70行;添加;监听的主机地址
bind 127.0.0.1 192.168.163.10				
#93行;Redis默认的监听端口
port 6379									
#137行;启用守护进程
daemonize yes							
#159行;指定 PID 文件
pidfile /var/run/redis_6379.pid				
#167行;日志级别
loglevel notice								
#172行;指定日志文件
logfile /var/log/redis_6379.log				/etc/init.d/redis_6379 restart

 4 Redis 命令工具

redis-server		用于启动 Redis 的工具
redis-benchmark		用于检测 Redis 在本机的运行效率
redis-check-aof		修复 AOF 持久化文件
redis-check-rdb		修复 RDB 持久化文件
redis-cli	 		Redis命令行工具

4.1 redis-cli 命令行工具

语法:redis-cli -h host -p port -a password-h	指定远程主机
-p	指定 Redis 服务的端口号
-a	指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
例:
redis-cli -h 192.168.163.10 -p 6379
#此时无密码,不需要-a直接登陆

4.2 redis-benchmark 测试工具

基本的测试语法:redis-benchmark [选项] [选项值]。-h	指定服务器主机名。
-p	指定服务器端口。
-s	指定服务器 socket
-c	指定并发连接数。
-n	指定请求数。
-d	以字节的形式指定 SET/GET 值的数据大小。
-k	1=keep alive 0=reconnect 。
-r	SET/GET/INCR 使用随机 key, SADD 使用随机值。
-P	通过管道传输请求。
-q	强制退出 redis。仅显示 query/sec 值。
--csv	以 CSV 格式输出。
-l	生成循环,永久执行测试。
-t	仅运行以逗号分隔的测试命令列表。
-I	Idle 模式。仅打开 N 个 idle 连接并等待。
  • 向 IP 地址为 192.168.163.10、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 192.168.163.10 -p 6379 -c 100 -n 100000
  • 测试存取大小为 100 字节的数据包的性能
redis-benchmark -h 192.168.163.10 -p 6379 -q -d 100
  • 测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能
redis-benchmark -t set,lpush -n 100000 -q

4.3 Redis 数据库常用命令

set/get 存放/获取数据

set		存放数据,命令格式为 set key value
get		获取数据,命令格式为 get key
例:
redis-cli -p 6379set name zhangsan
get name

keys 取值 

keys 	命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。set a1 1
set a2 2
set a33 3
set b1 4
set b2 5
set b33 6keys *
keys b*
keys b?
keys b??

exists 判断值是否存在

exists 	命令可以判断键值是否存在。

del 删除key 

del 	命令可以删除当前数据库的指定 key。

 type 获取值的类型

type 	命令可以获取 key 对应的 value 值类型

rename 重命名(覆盖) 

rename 命令是对已有 key 进行重命名。(覆盖)
命令格式:rename 源key 目标key

 renamenx 重命名(不覆盖)

renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名。(不覆盖)
命令格式:renamenx 源key 目标key

设置密码

  • 使用config set requirepass password命令设置密码
  • 使用config get requirepass命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)

 4.4 Redis 多数据库常用命令

多数据库间切换

命令格式:select 序号
使用 redis-cli 连接 Redis 数据库后,默认使用的是序号为 0 的数据库。

 多数据库间移动数据

格式:move 键值 序号
例:
set name lisi
get nameselect 5
get nameselect 0
move name 5
get nameselect 5
get name

 清除数据库内数据

FLUSHDB :清空当前数据库数据
FLUSHALL :清空所有数据库的数据,慎用!

5 Redis 高可用

在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。
但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。
在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和集群,下面分别说明它们的作用,以及解决了什么样的问题。

持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。
主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。
缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复。
缺陷:写操作无法负载均衡;存储能力受到单机的限制。
集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。
 

6 Redis 持久化

持久化的功能:Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致Redis进程异常退出后数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。

Redis 提供两种方式进行持久化

RDB 持久化:原理是将 Reids在内存中的数据库记录定时保存到磁盘上。
AOF 持久化(append only file):原理是将 Reids 的操作日志以追加的方式写入文件,类似于MySQL的binlog。
总结:由于AOF持久化的实时性更好,即当进程意外退出时丢失的数据更少,因此AOF是目前主流的持久化方式,不过RDB持久化仍然有其用武之地。
 

6.1 RDB 持久化

RDB持久化:指在指定的时间间隔内将内存中当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),用二进制压缩存储,保存的文件后缀是rdb;当Redis重新启动时,可以读取快照文件恢复数据。

触发条件

RDB持久化的触发分为手动触发自动触发两种。

①手动触发

save命令和bgsave命令都可以生成RDB文件。
save命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在Redis服务器阻塞期间,服务器不能处理任何命令请求。
而bgsave命令会创建一个子进程,由子进程来负责创建RDB文件,父进程(即Redis主进程)则继续处理请求。
bgsave命令执行过程中,只有fork子进程时会阻塞服务器,而对于save命令,整个过程都会阻塞服务器,因此save已基本被废弃,线上环境要杜绝save的使用。
②自动触发

在自动触发RDB持久化时,Redis也会选择bgsave而不是save来进行持久化。
自动触发最常见的情况是在配置文件中通过save m n,指定当m秒内发生n次变化时,会触发bgsave。
 

vim /etc/redis/6379.conf
#---------219行以下三个save条件满足任意一个时,都会引起bgsave的调用-----
save 900 1 :当时间到900秒时,如果redis数据发生了至少1次变化,则执行bgsave
save 300 10 :当时间到300秒时,如果redis数据发生了至少10次变化,则执行bgsave
save 60 10000 :当时间到60秒时,如果redis数据发生了至少10000次变化,则执行bgsave
#---------242行是否开启RDB文件压缩---------------------------------------
rdbcompression yes
#---------254行指定RDB文件名----------------------------------------------
dbfilename dump.rdb
#---------264行指定RDB文件和AOF文件所在目录-------------------------------
dir /var/lib/redis/6379

③其他自动触发机制

  • 除了save m n 以外,还有一些其他情况会触发bgsave:
    • 在主从复制场景下,如果从节点执行全量复制操作,则主节点会执行bgsave命令,并将rdb文件发送给从节点。
    • 执行shutdown命令时,自动执行rdb持久化。

执行流程

第一步:Redis父进程首先判断:当前是否在执行save,或bgsave/bgrewriteaof的子进程,如果在执行则bgsave命令直接返回。 bgsave/bgrewriteaof的子进程不能同时执行,主要是基于性能方面的考虑:两个并发的子进程同时执行大量的磁盘写操作,可能引起严重的性能问题。
第二步:父进程执行fork操作创建子进程,这个过程中父进程是阻塞的,Redis不能执行来自客户端的任何命令
第三步:父进程fork后,bgsave命令返回”Background saving started”信息并不再阻塞父进程,并可以响应其他命令
第四步:子进程创建RDB文件,根据父进程内存快照生成临时快照文件,完成后对原有文件进行原子替换
第五步:子进程发送信号给父进程表示完成,父进程更新统计信息
 

启动时加载

RDB文件的载入工作是在服务器启动时自动执行的,并没有专门的命令。
但是由于AOF的优先级更高,因此当AOF开启时,Redis会优先载入 AOF文件来恢复数据;
只有当AOF关闭时,才会在Redis服务器启动时检测RDB文件,并自动载入。服务器载入RDB文件期间处于阻塞状态,直到载入完成为止。
Redis载入RDB文件时,会对RDB文件进行校验,如果文件损坏,则日志中会打印错误,Redis启动失败。
 

6.2 AOF 持久化

  • RDB持久化是将进程数据写入文件,而AOF持久化,则是将Redis执行的每次写、删除命令记录到单独的日志文件中,查询操作不会记录; 当Redis重启时再次执行AOF文件中的命令来恢复数据。
  • 与RDB相比,AOF的实时性更好,因此已成为主流的持久化方案。

开启AOF

  • Redis服务器默认开启RDB,关闭AOF;要开启AOF,需要在配置文件中配置:
vim /etc/redis/6379.conf
#700行;修改;开启AOF
appendonly yes
#704行;指定AOF文件名称
appendfilename "appendonly.aof"
#796行是否忽略最后一条可能存在问题的指令
aof-load-truncated yes/etc/init.d/redis_6379 restart

 执行流程

由于需要记录Redis的每条写命令,因此AOF不需要触发,下面介绍AOF的执行流程。
AOF的执行流程包括:
命令追加(append):将Redis的写命令追加到缓冲区aof_buf;
文件写入(write)和文件同步(sync):根据不同的同步策略将aof_buf中的内容同步到硬盘;
文件重写(rewrite):定期重写AOF文件,达到压缩的目的。
 

①命令追加(append)

Redis先将写命令追加到缓冲区,而不是直接写入文件,主要是为了避免每次有写命令都直接写入硬盘,导致硬盘IO成为Redis负载的瓶颈。
命令追加的格式是Redis命令请求的协议格式,它是一种纯文本格式,具有兼容性好、可读性强、容易处理、操作简单避免二次开销等优点。在AOF文件中,除了用于指定数据库的select命令(如select 0为选中0号数据库)是由Redis添加的,其他都是客户端发送来的写命令。

②文件写入(write)和文件同步(sync)

Redis提供了多种AOF缓存区的同步文件策略,策略涉及到操作系统的write函数和fsync函数,说明如下:
为了提高文件写入效率,在现代操作系统中,当用户调用write函数将数据写入文件时,操作系统通常会将数据暂存到一个内存缓冲区里,当缓冲区被填满或超过了指定时限后,才真正将缓冲区的数据写入到硬盘里。这样的操作虽然提高了效率,但也带来了安全问题:如果计算机停机,内存缓冲区中的数据会丢失;因此系统同时提供了fsync、fdatasync等同步函数,可以强制操作系统立刻将缓冲区中的数据写入到硬盘里,从而确保数据的安全性。

AOF缓存区的同步文件策略存在三种同步方式,它们分别是:

appendfsync always: 命令写入aof_buf后立即调用系统fsync操作同步到AOF文件,fsync完成后线程返回。这种情况下,每次有写命令都要同步到AOF文件,硬盘IO成为性能瓶颈,Redis只能支持大约几百TPS写入,严重降低了Redis的性能;即便是使用固态硬盘(SSD),每秒大约也只能处理几万个命令,而且会大大降低SSD的寿命。
appendfsync no: 命令写入aof_buf后调用系统write操作,不对AOF文件做fsync同步;同步由操作系统负责,通常同步周期为30秒。这种情况下,文件同步的时间不可控,且缓冲区中堆积的数据会很多,数据安全性无法保证。
appendfsync everysec: 命令写入aof_buf后调用系统write操作,write完成后线程返回;fsync同步文件操作由专门的线程每秒调用一次。everysec是前述两种策略的折中,是性能和数据安全性的平衡,因此是Redis的默认配置,也是我们推荐的配置
 

③文件重写(rewrite)

随着时间流逝,Redis服务器执行的写命令越来越多,AOF文件也会越来越大;过大的AOF文件不仅会影响服务器的正常运行,也会导致数据恢复需要的时间过长。

文件重写是指定期重写AOF文件,减小AOF文件的体积。需要注意的是:

AOF重写是把Redis进程内的数据转化为写命令,同步到新的AOF文件;不会对旧的AOF文件进行任何读取、写入操作!
对于AOF持久化来说,文件重写虽然是强烈推荐的,但并不是必须的;即使没有文件重写,数据也可以被持久化并在Redis启动的时候导入;因此在一些实现中,会关闭自动的文件重写,然后通过定时任务在每天的某一时刻定时执行。
文件重写之所以能够压缩AOF文件,原因在于:

过期的数据不再写入文件
无效的命令不再写入文件
如有些数据被重复设值(set mykey v1, set mykey v2)、有些数据被删除了(sadd myset v1, del myset)等。
多条命令可以合并为一个
如sadd myset v1, sadd myset v2, sadd myset v3可以合并为sadd myset v1 v2 v3。
通过上述内容可以看出,由于重写后AOF执行的命令减少了,文件重写既可以减少文件占用的空间,也可以加快恢复速度。

文件重写的触发,分为手动触发和自动触发:
①手动触发:直接调用bgrewriteaof命令,该命令的执行与bgsave有些类似:都是fork子进程进行具体的工作,且都只有在fork时阻塞。
②自动触发:通过设置auto-aof-rewrite-min-size选项和auto-aof-rewrite-percentage选项来自动执行BGREWRITEAOF。 只有当auto-aof-rewrite-min-size和auto-aof-rewrite-percentage两个选项同时满足时,才会自动触发AOF重写,即bgrewriteaof操作。
auto-aof-rewrite-percentage 100 :当前AOF文件大小(即aof_current_size)是上次日志重写时AOF文件大小(aof_base_size)两倍时,发生BGREWRITEAOF操作
auto-aof-rewrite-min-size 64mb :当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF

关于文件重写的流程,有两点需要特别注意:

  • 重写由父进程fork子进程进行;
  • 重写期间Redis执行的写命令,需要追加到新的AOF文件中,为此Redis引入了aof_rewrite_buf缓存。

文件重写的流程

1)Redis父进程首先判断当前是否存在正在执行bgsave/bgrewriteaof的子进程,如果存在则bgrewriteaof命令直接返回,如果存在 bgsave命令则等bgsave执行完成后再执行。
(2)父进程执行fork操作创建子进程,这个过程中父进程是阻塞的。
(3.1)父进程fork后,bgrewriteaof命令返回”Background append only file rewrite started”信息并不再阻塞父进程, 并可以响应其他命令。Redis的所有写命令依然写入AOF缓冲区,并根据appendfsync策略同步到硬盘,保证原有AOF机制的正确。
(3.2)由于fork操作使用写时复制技术,子进程只能共享fork操作时的内存数据。由于父进程依然在响应命令,因此Redis使用AOF重写缓冲区(aof_rewrite_buf)保存这部分数据,防止新AOF文件生成期间丢失这部分数据。也就是说,bgrewriteaof执行期间,Redis的写命令同时追加到aof_buf和aof_rewirte_buf两个缓冲区。
(4)子进程根据内存快照,按照命令合并规则写入到新的AOF文件。
(5.1)子进程写完新的AOF文件后,向父进程发信号,父进程更新统计信息,具体可以通过info persistence查看。
(5.2)父进程把AOF重写缓冲区的数据写入到新的AOF文件,这样就保证了新AOF文件所保存的数据库状态和服务器当前状态一致。
(5.3)使用新的AOF文件替换老文件,完成AOF重写。
 

启动时加载

当AOF开启时,Redis启动时会优先载入AOF文件来恢复数据;
只有当AOF关闭时,才会载入RDB文件恢复数据。
当AOF开启,但AOF文件不存在时,即使RDB文件存在也不会加载。
Redis载入AOF文件时,会对AOF文件进行校验
如果文件损坏,则日志中会打印错误,Redis启动失败。
但如果是AOF文件结尾不完整(机器突然宕机等容易导致文件尾部不完整),且aof-load-truncated参数开启,则日志中会输出警告,Redis忽略掉AOF文件的尾部,启动成功。
配置中aof-load-truncated参数默认是开启的。
 

6.3 RDB和AOF的优缺点

RDB持久化

优点:RDB文件紧凑,体积小,网络传输快,适合全量复制;恢复速度比AOF快很多。当然,与AOF相比,RDB最重要的优点之一是对性能的影响相对较小。

缺点:RDB文件的致命缺点在于其数据快照的持久化方式决定了必然做不到实时持久化,而在数据越来越重要的今天,数据的大量丢失很多时候是无法接受的,因此AOF持久化成为主流。此外,RDB文件需要满足特定格式,兼容性差(如老版本的Redis不兼容新版本的RDB文件)。

对于RDB持久化,一方面是bgsave在进行fork操作时Redis主进程会阻塞,另一方面,子进程向硬盘写数据也会带来IO压力。


AOF持久化

与RDB持久化相对应,AOF的优缺点:
优点:支持秒级持久化、兼容性好;
缺点:文件大、恢复速度慢、对性能影响大。
对于AOF持久化,向硬盘写数据的频率大大提高(everysec策略下为秒级),IO压力更大,甚至可能造成AOF追加阻塞问题。
AOF文件的重写与RDB的bgsave类似,会有fork时的阻塞和子进程的IO压力问题。相对来说,由于AOF向硬盘中写数据的频率更高,因此对 Redis主进程性能的影响会更大。
 

总结

关系型数据库:
实例–>数据库–>表(table)–>记录行(row)、数据字段(column)

非关系型数据库:
实例–>数据库–>集合(collection)–>键值对(key-value)
非关系型数据库不需要手动建数据库和集合(表)。

相关文章:

2024OD机试卷-字符串序列判定 (java\python\c++)

题目:字符串序列判定 题目描述 输入两个字符串 S 和 L ,都只包含英文小写字母。S长度 ≤ 100,L长度 ≤ 500,000。判定S是否是L的有效子串。 判定规则:S 中的每个字符在 L 中都能找到(可以不连续),且 S 在L中字符的前后顺序与 S 中顺序要保持一致。(例如,S = ” ace…...

更高效的数据交互实现丨 DolphinDB Arrow 插件使用教程

Apache Arrow 是一种跨语言的内存数据交换格式,旨在为用户提供高效的数据结构,以实现在不同的数据处理系统之间共享数据而无需进行复制。它由 Apache 软件基金会开发和维护,目前已经成为许多大型数据处理和分析框架的核心组件之一。在分布式框…...

软件工程5.11

1...

密码方案的应用

密码方案可以应用于多种场景,包括但不限于以下几个方面: 1. 个人账户保护:密码方案可以用于保护个人账户的安全,例如电子邮箱、社交媒体账户、在线银行账户等。用户可以设置强密码,并定期更改密码,以防止黑客入侵。 2. 企业网络安全:密码方案可以用于保护企业内部网络的…...

cmd shutdown 中常用命令讲解

一段时间后关机:shutdown -s -t 秒数 效果是倒计时到该秒数后关机,例如shutdown-s-t3600就是3600秒后关机,也就是一小时后关机 立即关机命令:shutdown -p 关闭本地计算机,效果是马上关机,而不进行倒计时也可以使用 shutdown -s-te设置0秒后关机,也就是立即关机的意思 一…...

机器学习策略篇:详解为什么是人的表现?(Why human-level performance?)

为什么是人的表现? 在过去的几年里,更多的机器学习团队一直在讨论如何比较机器学习系统和人类的表现,为什么呢? 认为有两个主要原因,首先是因为深度学习系统的进步,机器学习算法突然变得更好了。在许多机器学习的应用领域已经开始见到算法已经可以威胁到人类的表现了。其…...

Redis配置与优化

1 关系数据库与非关系型数据库概述 1.1 关系型数据库 一个结构化的数据库,创建在关系模型(二维表格模型)基础上 一般面向于记录 SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言 用于执行对关系型数据库中…...

管理团队相关的梳理

管理团队是跟踪团队成员工作表现,提供反馈,解决问题并管理团队变更,以优化项目绩效的过程。本过程的主要作用是,影响团队行为、管理冲突以及解决问题等方式,实现团队管理。 输入 1.项目管理计划 --------资源管理计划 2. 项目文件 --------问题日志、经验教训登记册、项…...

HTML5期末大作业【红色的电影售票平台网站】web前端 html+css+javascript网页设计实例 企业网站制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…...

【三维目标检测】Part-A2(一)

Part-A2是商汤在CVPR 2020上发布的三维点云目标检测模型,来源于PointRCNN同一作者,论文名称《From Points to Parts 3D Object Detection from Point Cloud with Part-aware and Part-aggregation Network》。从名称可以看出,Part代表的是目标…...

C++输出四舍五入的一些小问题

嗯…今天刚去练了一会简单题 就我大一刚上学做的那种题,嗯,然后我发现我还是得调试,想骂人了,就啥样的题呢, 嗯,就这样的题,虽然我大一可能也过不了这种题,hh 现在题目里面要求一些四舍五入的问题 刚才没整…...

详解设计模式:责任链模式

责任链模式(Chain of Responsibility Pattern)也被称为职责链模式,是在 GoF 23 种设计模式中定义了的行为型模式。 责任链模式 是将链中的每一个节点看作是一个对象,每个节点处理的请求不同,且内部自动维护一个下一节点…...

Python源码剖析笔记1-整数对象PyIntObject

1、PyIntObject 对象 [intobject.h] typedef struct {PyObject_HEADlong ob_ival; } PyIntObjectPyIntObject是一个不可变(immutable)对象。Python内部也大量的使用整数对象,我们在自己的代码中也会有大量的创建销毁整型对象的操作&#xff…...

求一个网页设计作业——个人博客(HTML+CSS)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…...

HTML5期末大作业:基于html+css+javascript+jquery实现藏族文化15页【学生网页设计作业源码】

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…...

2. IMU原理及姿态融合算法详解

文章目录2. IMU原理及姿态融合算法详解一、组合二、 原理a) 陀螺仪b) 加速度计c) 磁力计三、 旋转的表达a) 欧拉角b) 旋转矩阵c) 四元数d) 李群 SO(3)\text{SO}(3)SO(3) 及 李代数 so(3)\text{so}(3)so(3)四、 传感器的噪声及去除a) 陀螺仪b) 加速度计c) 磁力计五、姿态解算原理…...

【能效管理】安科瑞远程预付费系统在江西某沃尔玛收费管理的应用

摘要:文章根据用电远程管控原理,设计了用电预付费远程管理终端及管理系统,该系统以智能远程预付费电表、智能网关以及预付费管理软件实现了商业综合体的用电管理,实现了欠费自动分闸,充值后自动合闸,并辅助…...

HTML+CSS+JS做一个好看的个人网页—web网页设计作业

个人网页设计个人网页(htmlcssjs)——网页设计作业带背景音乐(The way I still Love you)、樱花飘落效果、粒子飘落效果页面美观,样式精美涉及(htmlcssjs),下载后可以根据自己需求进…...

【MySQL】表的增删改查(一)

你可以了解世间万物,但追根溯源的唯一途径便是亲身尝试。——《心灵捕手》 前言: 大家好,我是拳击哥,今天给大家讲解的是mysql表GRUD操作中的新增数据、查询数据以及表中数据的排序、去重等。因篇幅过长,分为两期来讲解…...

HTML5期末考核大作业、HTML个人主页界面设计源码

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…...

计算机毕业设计Java酒店信息管理(源码+系统+mysql数据库+lw文档)

计算机毕业设计Java酒店信息管理(源码系统mysql数据库lw文档) 计算机毕业设计Java酒店信息管理(源码系统mysql数据库lw文档)本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:La…...

ARM 汇编编写 LED 灯

一、一步步点亮LED 1. 硬件工作原理及原理图查阅 LED 本身有 2 个接线点,一个是 LED 的正极,一个是 LED 的负极。LED 这个硬件的功能就是点亮或者不亮,物理上想要点亮一颗 LED 只需要给他的正负极上加正电压即可,要熄灭一颗 LED…...

用python编写远程控制程序

1.前言 远程控制是网络安全的一个极为重要的内容,无论是网络安全的维护者还是破坏者都会对此进行研究。维护者的目标是保证远程控制的安全,而破坏者的目标是希望能够凭借各种手段实现对目标设备的远程控制。 本文主要研究三个内容。 1.如何编写一个基于…...

安装docker,docker-compose

安装docker,docker-composeLinux时间不对ARM同步时间X86同步时间centos8更换源安装dockerARM安装dockerX86安装dockerdocker设置阿里镜像源docker 下载拉取报错安装docker-composeARM X86安装docker-composemac安装docker-composeLinux时间不对 ARM同步时间 # 安装chrony yum…...

一文带你深入理解【Java基础】· 泛型

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…...

RabbitMQ学习笔记

目录 尚硅谷mq视频学习笔记 1.1. MQ 的相关概念 1.1.1. 什么是MQ 1.1.2. 为什么要用MQ 1.1.3. MQ 的分类 1.ActiveMQ 2.Kafka 3.RocketMQ 4.RabbitMQ 1.1.4. MQ 的选择 1.Kafka 2.RocketMQ 3.RabbitMQ 1.2. RabbitMQ 1.2.1. RabbitMQ 的概念 1.2.2. 四大核心概念…...

Java安全-CC1

CC1 这里用的是组长的链子和yso好像不太一样&#xff0c;不过大体上都是差不多的。后半条的链子都是一样的&#xff0c;而且这条更短更易理解。yso的CC1过段时间再看一下。 环境 Maven依赖&#xff1a; <dependencies><dependency><groupId>commons-colle…...

【得到日期对象NSDate的各个部分 Objective-C语言】

一、得到日期对象NSDate的各个部分,年月日时分秒 1.例如,我这儿有1个NSDate对象, NSDate *date = [NSDate date]; 这个日期里面是不是有年、有月、有日、有时、有分、有秒 我想单独的拿到这个日期里面的年,该怎么拿 用date.year属性,行吗,不行,因为没有这个属性 用…...

前端面试常考 | CSS垂直居中解决方案

文章目录一. 前言二. flx布局实现三. Grid布局实现四. 绝对定位transform五. 绝对定位负margin五. 绝对定位calc六. 定位加margin一. 前言 前段时间刷到一篇帖子&#xff0c;说面试竟然遇到了CSS的考点&#xff0c;让回答CSS实现垂直居中的方式有哪些?&#xff0c;都2022年了…...

Flink中的UDF的实现

Flink 的 Table API 和 SQL 提供了多种自定义函数的接口&#xff0c;以抽象类的形式定义。当前 UDF 主要有以下几类&#xff1a; 标量函数&#xff08;Scalar Functions&#xff09;&#xff1a;将输入的标量值转换成一个新的标量值&#xff1b;表函数&#xff08;Table Funct…...

Linux教程

Linux 目录结构 /bin&#xff1a;&#xff08;binary&#xff09;存放的是一些二进制文件&#xff0c;但是在Linux中二进制文件是可以被执行的。这个目录中的命令文件是给普通用户使用&#xff08;非超级管理员用户&#xff09;。 /etc&#xff1a;Linux下所有的配置文件都会…...

1.3 Apache Hadoop的重要组成-hadoop-最全最完整的保姆级的java大数据学习资料

文章目录1.3 Apache Hadoop的重要组成1.3 Apache Hadoop的重要组成 HadoopHDFS(分布式文件系统)MapReduce(分布式计算框架)Yarn(资源协调框架)Common模块 Hadoop HDFS&#xff1a;&#xff08;Hadoop Distribute File System &#xff09;一个高可靠、高吞吐量的分布式文件系统…...

【蓝桥杯】第十四届模拟赛第一期及第二期填空汇总

目录 1.A题&#xff08;进制位数&#xff09; 位运算符 第一期 问题描述 解析 第二期 解析 代码 2.B题&#xff08;日期问题&#xff09; 第一期 问题描述 解析 代码实现 执行结果 第二期 问题描述 解析 3.C题&#xff08;数学问题&#xff09; 第一期 问题…...

Go学习之路-环境搭建

默认运行设备系统&#xff1a;MacOS 安装 安装包下载地址&#xff08;下面3个都可以&#xff09;&#xff1a; https://studygolang.com/dl https://golang.google.cn/dl/ https://golang.org/dl/ 我这里选择 pkg包、一键安装、默认的安装路径 /usr/local/go 环境 设置go语言…...

Siamese Neural Network (SNN: 孪生神经网络)

【学习参考】&#xff1a; https://blog.csdn.net/MyArrow/article/details/122539749https://blog.csdn.net/MyArrow/article/details/122539749 Siamese network 孪生神经网络--一个简单神奇的结构 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/35040994 【Siamese和Ch…...

22个每个程序员都应该知道的 Git 命令

在这篇文章中&#xff0c;我写了一个快速学习 git 命令的备忘单。它将包括开发人员每天使用的命令&#xff0c;如 git add、git commit、git pull、git fetch&#xff0c;并共享其他有用的 git 命令。 我一直使用Git的一些命令&#xff0c;今天这个列表清单&#xff0c;希望也…...

Android动画——使用动画启动Activity

1、使用动画启动Activity概述 我们在Android开发应用时&#xff0c;会遇到一个页面跳转到另一个页面的情况&#xff0c;这时候我们如果使用动画过渡会使得页面更加的流畅。这是一个滑动式的进入和退出的动画可以看到Android的过渡动画可以在不同状态之间建立视觉联系。您可以为…...

【YOLO系列改进NO.46】改进激活函数为ACON

文章目录 前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv7的如何改进进行详细…...

JavaScript -- 09. 内置对象的介绍

文章目录内置对象1 解构赋值1.1 保留默认值1.2 接受剩余的所有参数1.3 对函数执行结果解构1.4 交换两个变量的值1.5 二维数组结构2 对象的解构2.1 声明对象同时解构对象2.2 先声明再解构2.3 解构不存在的属性2.4 设置解构别名2.5 设置解构默认值3 对象的序列化3.1 对象的序列化…...

Spring核心与设计思想

⭐️前言⭐️ 这篇文章作为Spring篇目的开篇&#xff0c;带领大家认识Spring&#xff0c;知道为什么要用Spring框架&#xff0c;以及了解Spring的核心与设计思想。 &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【Jav…...

Java的字符串String

文章目录什么是字符串String类的声明为什么我们的String是不可变的为什么String类用final修饰String的创建字符串比较相等关于Java中的比较关于字符串不同赋值操作对应的内存分配那对象如何进行比较内容字符串常量池StringTalbe的位置字符串常见的操作拼接操作获得字符串的子串…...

net-java-php-python-网络安全教育学习网站计算机毕业设计程序

net-java-php-python-网络安全教育学习网站计算机毕业设计程序 net-java-php-python-网络安全教育学习网站计算机毕业设计程序本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1a;…...

git分支详解——记住这些指令能帮助你解决大部分git的分支问题

Github 之 分支 branch 操作之 查看分支/创建分支/切换分支/提交分支/删除分支/合并分支 等操作 一、简单介绍 二、查看分支 1、查看本地所有分支&#xff1a;git branch 2、查看远程有哪些分支&#xff1a;git branch -r 3、查看所有分支&#xff08;本地和远程的&#xff09;…...

jdk11新特性——JShell交互性工具

目录一、jshell概述二、jshell位置三、jshell示例3.1、示例一&#xff08;声明变量并赋值&#xff09;3.2、示例二&#xff08;输出打印内容&#xff09;3.3、示例三&#xff08;帮助命令&#xff09;一、jshell概述 java9引入了jshell这个交互性工具&#xff0c;让Java也可以…...

Git全套,从简到细

Git DravenGit一、git工具引入二、git本地工具2.1、下载2.2、使用2.3、修改2.4、查看历史版本2.5、回退历史版本2.6、起死回生三、git远程仓库3.1、使用gitee3.2、配置本地仓库参数3.3、查看gitee仓库3.4、修改后推送四、git两人协作-非冲突小智小杨五、git两人协作-冲突六、gi…...

【分布式能源的选址与定容】基于非支配排序多目标遗传优化算法求解分布式能源的选址与定容(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…...

基于PHP+MySQL托管中心管理系统的设计与实现

随着在校学生人数的不断增加,学生的数量也在不断的增加,但是很多时候因为父母工作忙没时间,以及一些其他的原因没办法对学生间辅导,这就诞生了托管中心这一行业,但是传统的托管中心多是人工手动的模式进行管理的,这很不科学也不合理,为了改变这一现状,我们开发了托管中心管理系…...

【算法】排序——直接排序

内部排序的全部过程都是在内存中进行的。按排序策略的不同可以将内部排序划分为直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序等。其中前三种排序方法属于简单的排序方法&#xff0c;其特点是排序过程直观、易于理解和实现&#xff0…...

华为高级技术专家多年经验分享微服务治理体系、架构及实践文档

前言 都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升…...

HTML+CSS网页设计期末课程大作业 【茶叶文化网站设计题材】web前端开发技术 web课程设计 网页规划与设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…...

数据结构与算法(六) 贪心算法

这篇文章来讲贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;这是一种特殊的动态规划算法 1、本质 我们在之前的文章中讲过&#xff0c;动态规划可以解决一类具有最优子结构和重叠子问题特征的问题 贪心算法本质上是一种特殊的动态规划算法&#xff0c;因此在…...

LeetCode-1774. 最接近目标价格的甜点成本【数组,背包问题,优化暴力,回溯】

LeetCode-1774. 最接近目标价格的甜点成本【数组&#xff0c;背包问题&#xff0c;优化暴力&#xff0c;回溯】题目描述&#xff1a;解题思路一&#xff1a;转化为0-1背包求解。一&#xff1a;因为每种配料最多可以用两次&#xff0c;所以直接把每种辅料变成两个。二&#xff1…...

Python封装机制及实现方法

大部分语言都具备 3 个典型特征&#xff0c;即封装、继承和多态。 简单的理解封装&#xff08;Encapsulation&#xff09;&#xff0c;即在设计类时&#xff0c;刻意地将一些属性和方法隐藏在类的内部&#xff0c;这样在使用此类时&#xff0c;将无法直接以“类对象.属性名”&…...

Flet 教程大全合集

Flet是什么 Flet 是一个框架,使您能够轻松地以您喜欢的语言构建实时 Web、移动和桌面应用程序,并与您的团队安全地共享它们。无需前端经验。 Flet有什么优势 Flet有什么特点 在几分钟内从想法到应用程序 用于您的团队、周末项目、数据输入表单、信息亭应用程序或高保真原型…...

mongodb整合springbootQ

SpringBoot整合MongoDB_一个冬天的童话的博客-CSDN博客_mongodb的依赖SpringBoot整合MongoDB的过程https://blog.csdn.net/m0_53563908/article/details/1268980981&#xff0c;环境配置 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId&g…...

【吴恩达机器学习笔记】十一、聚类

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…...

产品推荐 | 基于 AMD Virtex UltraScale FPGA VCU1287 的特性描述套件

01 产品概述 VCU1287 功能描述套件可为您提供描述和评估 Virtex™ UltraScale™ XCVU095-FFVB2104E FPGA 上可用 32 GTH (16Gbps) 和 32 GTY (30Gbps) 收发器所需的一切功能。每个 GTH 与 GTY Quad 及其相关参考时钟均从 FPGA 路由至 SMA 及 Samtec BullsEye 连接器。 Bulls…...

第三篇 Asciidoc的正确打开方式 Vscode中使用Asciidoc

在浏览器中 Asciidoc 文件,仅仅是编辑 Asciidoc 文件的若干方法之一。它的缺点是插入图片需要到别的地方找图床,这就很不方便。 我们都有自己熟悉的文本编辑器,或者集成开发环境(IDE)。在自己喜欢的 IDE 中,编辑 Asciidoc 文件,然后实时预览,岂不美哉? Asciidoc 的发…...

golang适配国产数据库

随着国产化的推进&#xff0c;越来越多的企业选择国产数据库替代mysql或者Oracle。 本篇主要介绍golang如何适配国产数据库 主流的国产数据库有达梦&#xff0c;金仓&#xff0c;神通&#xff0c;优炫&#xff0c;南大通用数据库等 前提环境 unixODBC安装 yum -y install un…...

爬虫学习(4)每日一笑

代码 import requests import re import osif __name__ "__main__":if not os.path.exists("./haha"):os.makedirs(./haha)url https://mlol.qt.qq.com/go/mlol_news/varcache_article?docid6321992422382570537&gameid3&zoneplat&webview…...

sql-行转列(转置)

- 行转列的常规做法是&#xff0c;group bysum(if())【或count(if())】 例题&#xff1a; 已知 yearmonthamount199111.1199121.2199131.3199141.4199212.1199222.2199232.3199242.4 查成这样一个结果 yearm1m2m3m419911.11.21.31.419922.12.22.32.4 解答&#xff1a; us…...

AXI4读时序在AXI Block RAM (BRAM) IP核中的应用

在本文中将展示描述了AXI从设备&#xff08;slave&#xff09;AXI BRAM Controller IP核与Xilinx AXI Interconnect之间的读时序关系。 1 Single Read 图1展示了一个从32位BRAM&#xff08;Block RAM&#xff09;进行AXI单次读取操作的时序示例。 图1 AXI 单次读时序图 在该…...

工厂策略模式

工厂模式用于干掉大量的if-else &#xff0c;策略模式用于挪去臃肿的业务代码&#xff0c;还可以进一步升级加上模板模式&#xff0c;以及抽取成Starter public interface HandlerStrategy extends InitializingBean {void findSyncOrders(); }public class SalesPlatformFact…...

如何去掉图片背景改成透明的?一键图片去底色工具推荐

如何去掉图片背景改成透明的&#xff1f;在很多比较特殊的场景中&#xff0c;我们需要把图片背景底色去除后再进行使用&#xff0c;比如一些商品展示图或者是网页设计中的一些logo图标&#xff0c;专业人士会直接选择使用ps来处理&#xff0c;但是也有许多新手小白不知道怎么去…...

AI驱动的自动化测试:提升测试效率和准确性

随着软件开发行业的不断发展&#xff0c;软件测试也变得越来越重要。而在传统的手动测试中&#xff0c;测试人员需要逐一执行测试用例&#xff0c;这既费时又容易出现遗漏。为了提高测试效率和准确性&#xff0c;越来越多的组织开始引入AI驱动的自动化测试。 AI驱动的自动化测…...

子模块介绍,开发规范说明和工具类封装

在上一章的内容中&#xff0c;我们完成了聚合工程的搭建以及工程依赖的导入 当然我们会延续上一章的传统提供一个传送门给各位&#xff0c;如未完成上一章内容&#xff0c;请点击左侧->传送门 概述子模块 上一章我们已经创建了整个聚合工程 该聚合工程有以下子模块 <…...

EXECL小技巧

一、批量给某列添加单引号或者双引号 如下&#xff1a;D2列为需要添加引号的列&#xff0c;效果如下图 1.双引号 """"&D2&"""" 2.双引号后增加逗号 """"&D2&""""&&quo…...

OVZ虚拟化:解锁高性能的虚拟化利器

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 OVZ虚拟化&#xff1a;解锁高性能的虚拟化利器 前言OVZ虚拟化简介OVZ虚拟化的优势OVZ虚拟化的应用场景OVZ虚拟化的部署与管理 前言 在当今快节奏的数字时代&#xff0c;虚拟化技术是推动云计算和容器…...