openGauss使用BenchmarkSQL进行性能测试(上)

前言

本文提供openGauss使用BenchmarkSQL进行性能测试的方法和测试数据报告。

BenchmarkSQL,一个JDBC基准测试工具,内嵌了TPC-C测试脚本,支持很多数据库,如PostgreSQL、Oracle和Mysql等。

TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统。几乎所有在OLTP市场提供软硬平台的国外主流厂商都发布了相应的TPC-C测试结果,随着计算机技术的不断发展,这些测试结果也在不断刷新。

二、TPC-C 标准测试概述

1.模拟 5 种事务处理

1)新订单(New-Order):事务内容:对于任意一个客户端,从固定的仓库随机选取 5-15 件商品,创建新订单.其中 1%的订单要由假想的用户操作失败而回滚。(主要特点:中量级、读写频繁、要求响应快)

2)支付操作(Payment):事务内容:对于任意一个客户端,从固定的仓库随机选取一个辖区及其内用户,采用随机的金额支付一笔订单,并作相应历史纪录。(主要特点:轻量级,读写频繁,要求响应快)

3)订单状态查询(Order-Status):事务内容:对于任意一个客户端,从固定的仓库随机选取一个辖区及其内用户,读取其最后一条订单,显示订单内每件商品的状态。(主要特点:中量级,只读频率低,要求响应快)

4)发货(Delivery): 事务内容:对于任意一个客户端,随机选取一个发货包,更新被处理订单的用户余额,并把该订单从新订单中删除。(主要特点:1-10 个批量,读写频率低,较宽松的响应时间)

5)库存状态查询(Stock-Level):事务内容:对于任意一个客户端,从固定的仓库和辖区随机选取最后 20 条订单,查看订单中所有的货物的库存,计算并显示所有库存低于随机生成域值的商品数量。(主要特点:重量级,只读频率低,较宽松的响应时间)

 

每个Warehouse数据量约为:76823.04KB

2.TPC-C 测试指标

TPC-C测试的结果主要有两个指标,即流量指标(Throughput,简称tpmC)和性价比(Price/Performance,简称Price/tpmC)

1)流量指标(Throughput,简称tpmC): 按照TPC组织的定义,流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这4种交易的同时,每分钟可以处理多少个新订单交易。所有交易的响应时间必须满 足TPC-C测试规范的要求,且各种交易数量所占的比例也应该满足TPC-C测试规范的要求。在这种情况下,流量指标值越大说明系统的联机事务处理能力越高。

2)性价比(Price/Performance,简称Price/tpmc): 即测试系统的整体价格与流量指标的比值,在获得相同的tpmC值的情况下,价格越低越好。

做TPC-C测试的目的主要有两点:

1)贴近生产环境进行实际操作(TPC-C可以提供类似这样的环境)。

2)通过TPC-C测试结果可以清晰的了解数据库的性能等信息。

三、环境介绍

1.服务器信息

主机IP

配置

操作系统

描述

192.168.52.3

1c/4GB/30GB

CentOS Linux release 7.6.1810 (Core)

DB服务器

192.168.52.4

1c/2GB/20GB

CentOS Linux release 7.9.2009 (Core)

BenchmarkSQL服务器

2.软件信息

软件名称

版本

描述

openGauss

3.1.1

关系型(开源)数据库

BenchmarkSQL

5.0

一个JDBC基准测试工具,内嵌了TPC-C测试脚本,支持很多数据库,如PostgreSQL、Oracle和Mysql等。

TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统。

几乎所有在OLTP市场提供软硬平台的国外主流厂商都发布了相应的TPC-C测试结果,

随着计算机技术的不断发展,这些测试结果也在不断刷新。

JDK

java-1.8.0-openjdk

Java开发工具包,它包含了Java开发所需的所有核心组件和工具。JDK是构建Java应用程序、Java平台和Java Web服务的基础。

R语言

3.6.3

R语言(generateReport.sh脚本需要) ,支持png报告图片生成

htop

3.3.0

htop 是一个交互式的进程监控工具,主要用于查看和管理运行中的进程。

它以用户友好的方式显示进程列表,包括进程的 CPU、内存和交换空间使用情况,以及进程树结构。

htop 允许你通过键盘快捷键来进行排序、搜索、终止进程等操作。

htop 提供了颜色和动态更新的界面,更直观地显示资源使用情况。

htop 适合实时查看和管理运行中的进程,特别是在终端环境中。

ant

Apache Ant(TM) version 1.9.4

一个用于自动化构建过程的工具。它主要用于Java应用程序,但也可以用于其他类型的项目。Ant使用XML文件(通常称为build.xml)来描述构建过程,包括编译源代码、运行测试、打包应用程序等任务。

python

2.7.5

数据库服务器,BenchmarkSQL对应的python版本不能过高,否则存在兼容性报错

、配置BenchmarkSQL主机

1. 根据官方文档,安装必要的软件包

  • 配置YUM源

(若仅使用华为云内网的YUM源(http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo),会造成软件版本依赖问题)

## 配置华为YUM源
mkdir -p /etc/yum.repos.d/repo_bak/
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo

## 配置Epel源
yum remove  -y  epel-release
yum install -y  https://repo.huaweicloud.com/epel/epel-release-latest-7.noarch.rpm
cd /etc/yum.repos.d/
rm -rf epel-testing.repo

sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo
sed -i "s/mirrorlist/#mirrorlist/g" /etc/yum.repos.d/epel.repo
sed -i "s@http://download.fedoraproject.org/pub@https://repo.huaweicloud.com@g" /etc/yum.repos.d/epel.repo

## 顺刷新缓存
yum clean all
yum makecache
yum repolist all
  • 安装依赖软件包

yum install gcc glibc-headers gcc-c++ gcc-gfortran readline-devel  libXt-devel pcre-devel libcurl libcurl-devel -y
yum install ncurses ncurses-devel autoconf automake zlib zlib-devel bzip2 bzip2-devel xz-devel -y
yum install java-1.8.0-openjdk  ant  -y
  • 安装R语言(generateReport.sh脚本需要

yum install pango-devel pango libpng-devel cairo cairo-devel  ## 使R语言支持png图片,否则报告生成有问题
wget https://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.6.3.tar.gz
tar -zxf R-3.6.3.tar.gz
cd R-3.6.3
./configure && make && make install

## 如果需要重新安装,请参考以下步骤 ##
make uninstall
./configure
make
make install
  • 编译安装htop(服务器端和客户端都安装)

xz –d htop-3.3.0.tar.xz
tar xvf htop-3.3.0.tar
cd htop-3.0.5
./autogen.sh && ./configure && make && make install
  • 检查安装情况(java/ant/htop

[root@localhost ~]# ant -version
Apache Ant(TM) version 1.9.4 compiled on November 5 2018

[root@localhost ~]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)

[root@localhost ~]# htop --version
htop 3.3.0

[root@localhost ~]# R --version
R version 3.6.0 (2019-04-26) -- "Planting of a Tree"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)

2. 准备软件

  • 解压软件及JDBC驱动(解压对应的软件包)

unzip benchmarksql-5.0.zip
tar -zxvf openGauss-1.1.0-JDBC.tar.gz
  • 替换默认的postgresql驱动

cd /root/soft/benchmarksql-5.0/lib/postgres/
mv postgresql-9.3-1102.jdbc41.jar postgresql-9.3-1102.jdbc41.jar.bak
mv /soft/postgresql.jar  .
  • 使用ant编译

cd /root/soft/benchmarksql-5.0/
[root@localhost benchmarksql-5.0]# ant
Buildfile: /root/soft/benchmarksql-5.0/build.xml

init:
    [mkdir] Created dir: /root/soft/benchmarksql-5.0/build

compile:
    [javac] Compiling 11 source files to /root/soft/benchmarksql-5.0/build

dist:
    [mkdir] Created dir: /root/soft/benchmarksql-5.0/dist
      [jar] Building jar: /root/soft/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar

BUILD SUCCESSFUL
Total time: 2 seconds

3. 配置软件

  • 配置props文件(配置文件切忌多余空格,否则会出现各种错误)

说明:进入run目录,会看到多个不同后缀名的props文件,不同的文件配置不同的数据库,由于我们需要压测postgresql和openGauss,openGauss兼容postgresql,需要配置props.pg文件。cp props.pg props.opengauss在配置文件中需要修改的包括conn,user, password(这三项用于连接指定的数据库,因此需要提前在postgresql中创建好对应的DB以及用户) 

cd /root/soft/benchmarksql-5.0/run
[root@localhost run]# cp props.pg props.openGauss
[root@localhost run]# vi props.openGauss
db=postgres
driver=org.postgresql.Driver
conn=jdbc:postgresql://192.168.52.3:26000/tpcc
user=benchmarksql
password=P@ssw0rdabc
warehouses=2
loadWorkers=4
terminals=2
runTxnsPerTerminal=0
runMins=5
limitTxnsPerMin=0
terminalWarehouseFixed=false
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1
osCollectorSSHAddr=root@192.168.52.3
osCollectorDevices=net_ens33 blk_sda

注释:
db=postgres 指定数据库类型,当前类型为postgres
driver=org.postgresql.Driver postgres数据库的JDBC驱动
conn=jdbc:postgresql://192.168.1.71:5496/benchmarksql postgres的连接字符串,格式为:conn=jdbc:postgresql://IP:端口/库名
user=benchmarksql 连接postgres的用户名
password=PostgreSQL5432 连接postgres的用户名的密码
warehouses=1 仓库数量,每个warehouse数据量大概在100MB左右,那么数据库大小为1000MB左右,默认1个仓库
loadWorkers=4 数据库初始化数据时候的进程数,默认4个load加载进程
terminals=1 指定终端数量,默认1个终端
runTxnsPerTerminal=10 指定压测每个终端执行的事务数量。如果该参数配置为非0时,下面的runMins参数必须设置为0
runMins=0  指定压测的时长(单位:分钟)。如果该值设置为非0值时,runTxnsPerTerminal参数必须设置为0。
limitTxnsPerMin=300 每分钟事务总数限制,该参数主要控制每分钟处理的事务数,事务数受terminals参数的影响,limitTxnsPerMin/terminals的值必须是正整数。
terminalWarehouseFixed=true 终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true。
下面五个值的总和必须等于100,默认值为:45, 43, 4, 4,4 ,与TPC-C测试定义的比例一致,实际操作过程中,可以调整比重来适应各种场景。
newOrderWeight=45  新订单事务占总事务的45%
paymentWeight=43    支付订单事务占总事务的43%
orderStatusWeight=4  订单状态事务占总事务的4%
deliveryWeight=4        到货日期事务占总事务的4%
stockLevelWeight=4    查看现存货品的事务占总事务的4%
 resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS 压测期间收集系统性能数据的目录(无需修改)
osCollectorScript=./misc/os_collector_linux.py 操作系统性能收集脚本(无需修改)
osCollectorInterval=1 操作系统收集操作间隔,默认为1秒
osCollectorSSHAddr=user@dbhost 需要收集系统性能的主机
osCollectorDevices=net_eth0 blk_sda 操作系统中被收集服务器的网卡名称和磁盘名称,根据个人环境进行调整
  • 配置tableCreates.sql脚本(可适当调整表的表空间分布,充分利用多块磁盘的IO)

cd /root/soft/benchmarksql-5.0/run/sql.common
[root@localhost sql.common]# cp tableCreates.sql tableCreates.sql.bak
[root@localhost sql.common]# vi tableCreates.sql
--CREATE TABLESPACE tbs1 location '/home/omm/data/tbs1';
--CREATE TABLESPACE tbs2 location '/home/omm/data/tbs2';

create table bmsql_config (
  cfg_name    varchar(30) primary key,
  cfg_value   varchar(50)
);

create table bmsql_warehouse (
  w_id        integer   not null,
  w_ytd       decimal(12,2),
  w_tax       decimal(4,4),
  w_name      varchar(10),
  w_street_1  varchar(20),
  w_street_2  varchar(20),
  w_city      varchar(20),
  w_state     char(2),
  w_zip       char(9)
);

create table bmsql_district (
  d_w_id       integer       not null,
  d_id         integer       not null,
  d_ytd        decimal(12,2),
  d_tax        decimal(4,4),
  d_next_o_id  integer,
  d_name       varchar(10),
  d_street_1   varchar(20),
  d_street_2   varchar(20),
  d_city       varchar(20),
  d_state      char(2),
  d_zip        char(9)
);

create table bmsql_customer (
  c_w_id         integer        not null,
  c_d_id         integer        not null,
  c_id           integer        not null,
  c_discount     decimal(4,4),
  c_credit       char(2),
  c_last         varchar(16),
  c_first        varchar(16),
  c_credit_lim   decimal(12,2),
  c_balance      decimal(12,2),
  c_ytd_payment  decimal(12,2),
  c_payment_cnt  integer,
  c_delivery_cnt integer,
  c_street_1     varchar(20),
  c_street_2     varchar(20),
  c_city         varchar(20),
  c_state        char(2),
  c_zip          char(9),
  c_phone        char(16),
  c_since        timestamp,
  c_middle       char(2),
  c_data         varchar(500)
);

create sequence bmsql_hist_id_seq;

create table bmsql_history (
  hist_id  integer,
  h_c_id   integer,
  h_c_d_id integer,
  h_c_w_id integer,
  h_d_id   integer,
  h_w_id   integer,
  h_date   timestamp,
  h_amount decimal(6,2),
  h_data   varchar(24)
);

create table bmsql_new_order (
  no_w_id  integer   not null,
  no_d_id  integer   not null,
  no_o_id  integer   not null
);

create table bmsql_oorder (
  o_w_id       integer      not null,
  o_d_id       integer      not null,
  o_id         integer      not null,
  o_c_id       integer,
  o_carrier_id integer,
  o_ol_cnt     integer,
  o_all_local  integer,
  o_entry_d    timestamp
);

create table bmsql_order_line (
  ol_w_id         integer   not null,
  ol_d_id         integer   not null,
  ol_o_id         integer   not null,
  ol_number       integer   not null,
  ol_i_id         integer   not null,
  ol_delivery_d   timestamp,
  ol_amount       decimal(6,2),
  ol_supply_w_id  integer,
  ol_quantity     integer,
  ol_dist_info    char(24)
);

create table bmsql_item (
  i_id     integer      not null,
  i_name   varchar(24),
  i_price  decimal(5,2),
  i_data   varchar(50),
  i_im_id  integer
);

create table bmsql_stock (
  s_w_id       integer       not null,
  s_i_id       integer       not null,
  s_quantity   integer,
  s_ytd        integer,
  s_order_cnt  integer,
  s_remote_cnt integer,
  s_data       varchar(50),
  s_dist_01    char(24),
  s_dist_02    char(24),
  s_dist_03    char(24),
  s_dist_04    char(24),
  s_dist_05    char(24),
  s_dist_06    char(24),
  s_dist_07    char(24),
  s_dist_08    char(24),
  s_dist_09    char(24),
  s_dist_10    char(24)
);
  • 配置与数据库服务器的ssh互信

执行如下命令行

ssh-keygen -t rsa
ssh-copy-id root@192.168.52.3     #password:P@ssw0rd123

五、配置openGauss DB主机

1. 创建数据库及用户(与前面props.openGauss文件配置保持一致)

[root@node1 ~]# su omm
[omm@node1 root]$ gsql -d postgres -p 26000 -ar
openGauss=# create user benchmarksql with sysadmin identified by 'P@ssw0rdabc';
CREATE ROLE
openGauss=# create database tpcc owner =benchmarksql encoding='UTF8';
CREATE DATABASE

2. 配置pg_hba.conf

[omm@prod ~]$ gs_guc reload -N all -I all -h "host  tpcc  benchmarksql  192.168.52.4/32  sha256"

/gaussdb/data/db1/pg_hba.conf

3. 备份数据目录,测试完毕后可以快速恢复

[omm@node1 ~]$ gs_ctl stop -D /gaussdb/data/db1
[omm@node1 ~]$ cp -r /gaussdb/data/db1 /gaussdb/data/db1_bak
[omm@node1 ~]$ gs_ctl start -D /gaussdb/data/db1

下一篇我们将分享发起测试及测试结果~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考高项总结:第16章采购管理(一)

一、管理基础 1、项目采购管理包括从项目团队外部采购或获取所需产品、服务或成果的各个过程。例如合同、订购单、协议备忘录(MOA)和服务水平协议(SLA)。被授权采购项目所需货物、服务的人员可以是项目团队、管理层或组织采购部的成员。 2、协议可以是合同、服务水平协议(SL…

基于AM62X+FPGA/MCU的B码对时定制化整机解决方案

什么是IRIG-B码对时 IRIG-B(inter-range instrumentationgroup-B)码是一种时间同步标准,通常用于精确的时间测量和数据同步,广泛应用于电力、通信、航空等领域。 IRIG-B码为每秒一帧的时间串码,一帧串码中包含100个码元,频率为1K…

git svn混用

背景 项目代码管理初始使用的svn, 由于svn代码操作,无法在本地暂存,有诸多不便,另外本人习惯使用git. 所以决定迁移至git管理 迁移要求: 保留历史提交记录 迁移流程 代码检出 git svn svn_project_url git代码提交 修改本…

可回馈式直流电子负载原理是怎样的

可回馈式直流电子负载可以将电能回馈到电网中,从而实现对电源系统的测试和分析。其工作原理主要包括以下几个方面: 1. 能量转换:可回馈式直流电子负载通过内部的功率开关管将输入的直流电转换为交流电,然后通过变压器将电压升高或…

【阿里云系列】-部署ACK集群的POD应用日志如何集成到日志服务(SLS)中

介绍 我们在实际部署应用到阿里云的ACK集群后,由于后期应用服务的持续维护诉求可能需要跟踪排查问题,此时就要具备将应用的历史日志存档便于后期排查问题 处理方式 为了解决以上的普遍需求,需要将ACK中的应用日志采集到SLS的Logstore中,然…

SpringBoot实战项目——博客笔记项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍二、项目的整体框架 2.1 数据库模块 2.2 前端模块 2.3 后端模块三、项目图片展示四、项目的实现 4.1 准备工作 4.…

HarmonyOS-页面跳转Router实例演示

本文将以APP的登录和修改昵称为例演示官网的几种页面跳转、返回以及这些流程携带参数,实例的形式记录学习HarmonyOS的页面跳转。 “页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,…

47、C++/引用,函数重载,类相关学习20240312

一、自己封装一个矩形类(Rect),拥有私有属性:宽度(width)、高度(height), 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show()。 代码&…

在 Rust 中使用 Serde 处理json

在 Rust 中使用 Serde 处理json 在本文中,我们将讨论 Serde、如何在 Rust 应用程序中使用它以及一些更高级的提示和技巧。 什么是serde? Rust中的serde crate用于高效地序列化和反序列化多种格式的数据。它通过提供两个可以使用的traits来实现这一点&a…

数字孪生+工业互联网标识解析,打造智能工厂新标杆!

当前,工业4.0浪潮愈发澎湃,加快数字化、网络化、智能化发展成为了制造业转型升级的必然要求。 51WORLD基于数字孪生技术与工业互联网标识解析体系,打造了一个集协同化供应、个性化定制、智能化生产于一体的全连接产线孪生平台(以…

AndroidStudio设计登录页源码(音悦app)

目录 一、代码 二、效果 一、代码 1.在activity_main.xml里的代码 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent&quo…

(一)RabbitMQ实战——rabbitmq的核心组件及其工作原理介绍

前言 RabbitMQ是一个开源的消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;提供可靠的消息传递机制。RabbitMQ可以用于在应用程序之间传递消息&#xff0c;实现不同应用系统之间的解耦和通信。它支持多种编程语言&#xff0c;…

11.Java---语法总结之一个小项目

图书管理系统 Java学习了很久了,今天将运用之前学习的所有东西整理做个小小的小项目. 1.首先是各种包和操作方法建好 2.然后是项目的大框架搭好 3.然后就开始实现各个部分了 看看最后的运行结果吧! 管理员测试 1.登录&显示图书的运行结果 2.查找&新增图书的运行结…

C goto 语句

C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 注意&#xff1a;在任何编程语言中&#xff0c;都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪&#xff0c;使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语…

安卓逆向 安装frida

1,准备工作 安装adb环境,python最高支持到3.8 2,下载雷电模拟器5.0(安卓是7.0)要64位的 雷电安卓模拟器-手游模拟器安卓版_android手机模拟器电脑版_雷电模拟器官网 3,下载frida服务端(版本要与安卓版本匹配;与客户端版本要一致) 在模拟器查看架构 adb shell getprop ro.pr…

数组和指针笔试题目解析---掌握他们拿下指针魔鬼

目录 一、前言二、一维数组2.1代码2.2分析2.3验证运行结果 三、字符数组3.1代码13.1.1分析3.1.2验证运行结果 3.2代码23.2.1分析3.2.2验证运行结果 3.3代码33.3.1分析3.3.2验证运行结果 3.4代码43.4.1分析3.4.2验证运行结果 3.5代码53.5.1分析3.5.2验证运行结果 3.6代码63.6.1分…

D7805 ——体积小,成本低,性能好

D7805 构成的 5V 稳压电源为输出电压5V&#xff0c;输出电流 1000mA 的稳压电源它由滤波电容 C1,C3,防止自激电容 C2、C3 和一只固定三端稳压器&#xff08;7805&#xff09;后级加 LC 滤波极为简洁方便地搭成&#xff0c;输入直流电压范围为 7~35V&#xff0c;此直流电压经过D…

机械女生,双非本985硕,目前学了C 基础知识,转嵌入式还是java更好?

作为单片机项目开发的卖课佬&#xff0c;个人建议&#xff0c;先转嵌入式单片机开发方向&#xff0c;哈哈。 java我也学过&#xff0c;还学过oracle、mysql数据库&#xff0c;只是当时没做笔记&#xff0c;找不好充分的装逼证据了。 从实习通过业余时间&#xff0c;学到快正式毕…

(黑马出品_高级篇_03)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_高级篇_03&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术——多级缓存 今日目标1.什么是多级缓存2.JVM进程缓存2.1.导入案例2.1.1.安装MySQL2.1.1.1.准备目录2.1.1.2.运行命令2.1.1.3.修改配置 2.1.1.4.…

学编程前需要知道哪些编程语言呢?

编程语言的选择对学习编程的重要性不可低估。不同编程语言各有独特特点和适用场景&#xff0c;合理选择适合自身需求的编程语言能事半功倍。初学者而言&#xff0c;选择一门简洁易读的编程语言如Python&#xff0c;可以快速掌握编程基础原理&#xff0c;轻松编写程序&#xff0…