Docker安装Mysql、Redis、nginx、nacos等环境

相关系列文章:
1、Docker+Harbor私有仓库快速搭建
2、Docker+Jenkins+Harbor

1、服务器

Ip部署内容说明
192.168.88.7Docker、Mysql、redis、nacosnode1
192.168.88.8Docker、Mysql、redis、nacosnode2
192.168.88.9Docker、redis、nacos、nginxnode3

2、安装PXC8.0 Mysql集群

2-1 开发需要的端口

各个服务器都需要执行,配置完重启docker:service docker restart

2377:用于集群管理通信的TCP端口
4789:用于容器覆盖网络
7946:用于容器网络发现

firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --zone=public --add-port=4789/tcp --permanent
firewall-cmd --zone=public --add-port=4789/udp --permanent
firewall-cmd --zone=public --add-port=7946/tcp --permanent
firewall-cmd --zone=public --add-port=7946/udp --permanent
firewall-cmd --reload
# 查看防火墙状态
systemctl status firewalld
# 启动
systemctl start firewalld
# 停止
systemctl stop firewalld
# 开机自启
systemctl enable firewalld

2-2 创建docker swarm集群

# node1主节点执行命令,将运行的结果用于node2服务器执行
docker swarm init

其他:

# 查询swarm集群节点,主节点才可运行
docker node ls
# 解散swarm集群
docker swarm leave -f

如果要删除一个节点,执行命令为 :docker node rm -f [节点的ID]
如果要解散 swarm 集群 先再 【manager节点】上删除 所有 【worker 节点】 再强制删除自己,执行:docker swarm leave -f
最后,还需要在各个【worker 节点】主机上执行:docker swarm leave

在这里插入图片描述

2-3 创建docker虚拟网络

# swarm_mysql为自定义名称
docker network create -d overlay --attachable swarm_mysql

其他:

# 查看虚拟网络: 
docker network inspect swarm_mysql
# 所有虚拟网络: 
docker network ls
# 删除虚拟网络: 
docker network rm swarm_mysql

在这里插入图片描述

2-4 搭建pxc8.0

配置证书
官网
pxc8.0默认开启同步加密方式,需要每台服务器都配置一样证书才能通过认证。每台服务器都需要执行

# 创建目录
mkdir -p ~/pxc-docker/config
cd ~/pxc-docker/config
vim custom.cnf

custom.cnf文件:

[mysqld]
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-key = /cert/server-key.pem[client]
ssl-ca = /cert/ca.pem
ssl-cert = /cert/client-cert.pem
ssl-key = /cert/client-key.pem[sst]
encrypt = 4
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-key = /cert/server-key.pem
# 此目录用于生成自签名SSL证书
mkdir -m 777 -p ~/pxc-docker/cert
# 使用官方镜像生成证书到~/pxc-docker/cert目录
docker run --name pxc-cert --rm -v ~/pxc-docker/cert:/cert percona/percona-xtradb-cluster:8.0 mysql_ssl_rsa_setup -d /cert

在这里插入图片描述
下载镜像
仓库

# 镜像不存在则下载镜像,每台服务器都要执行
docker pull percona/percona-xtradb-cluster:8.0
# 重命名
docker tag percona/percona-xtradb-cluster:8.0 pxc
# 删除镜像
docker rmi percona/percona-xtradb-cluster:8.0

在这里插入图片描述
创建数据卷

#node1执行
docker volume create pxc_node1#node2执行
docker volume create pxc_node2

创建容器
node1服务器执行:

docker run -d \--net=swarm_mysql \-e MYSQL_ROOT_PASSWORD=123456 \-e CLUSTER_NAME=pxc-cluster \--name=pxc_node1 \-v pxc_node1:/var/lib/mysql \-v ~/pxc-docker/cert:/cert \-v ~/pxc-docker/config:/etc/percona-xtradb-cluster.conf.d \-p 3306:3306 \--privileged \pxc

CLUSTER_NAME: pxc集群名称,每个节点的名称要一样
name: 容器名称
net:加入到虚拟网络
MYSQL_ROOT_PASSWORD: mysql的root密码

在这里插入图片描述
node2服务器执行:

docker run -d \--net=swarm_mysql \-e MYSQL_ROOT_PASSWORD=123456 \-e CLUSTER_NAME=pxc-cluster \-e CLUSTER_JOIN=pxc_node1 \--name=pxc_node2 \-v pxc_node2:/var/lib/mysql \-v ~/pxc-docker/cert:/cert \-v ~/pxc-docker/config:/etc/percona-xtradb-cluster.conf.d \-p 3306:3306\--privileged \pxc

-e CLUSTER_NAME=pxc-cluster 表示加入上面的集群
-e CLUSTER_JOIN=pxc_node1 表示加入node1节点

在这里插入图片描述

ps:
1、如果pxc_node2节点启动失败,可以尝试把node1服务器上面命令生成的证书重新拷贝到node2服务器上,然后重启docker,重启容器:docker restart pxc_node2
2、可以使用命令查询日志:docker logs pxc_node2
3、如果模拟节点宕机后重启失败,可以检查一下防火墙相关端口是否开放,节点是否加入swarm集群
4、因为我这里集群只有两台机子,当node1节点模拟宕机后再重新启动后,两个服务器的mysql数据库数据是不同步,只有我重新删除node1、node2的pxc_node1、pxc_node2容器后,重新运行启动容器才同步数据,网上其他文章说node1以节点方式加入node2集群即可正常同步数据,这一点未验证,需要的自行验证,需要明确更多集群的数据同步情况的自行测试。一般建议集群数量>=3,操作步骤类似。
5、实践测试可以参考:https://www.yuque.com/liweiming/linux/fcw6w8#9a96ee84
6、非正常关闭,node1不是最后一个离开节点可以修改挂载卷下面的grastate.dat文件中的safe_to_bootstrap修改为1后保存,然后重启

3、安装redis6.0.8集群

参考:
https://blog.csdn.net/gy_cjz/article/details/125790214
https://blog.csdn.net/weixin_45821811/article/details/119421774

Ip端口说明
192.168.88.76381、6382node1
192.168.88.86383、6384node2
192.168.88.96385、6386node3

3-1 编写redis-cluster.tmpl配置文件

node1服务器redis-cluster.tmpl

#端口号
port ${PORT}
#设置客户端连接后进行任何其他指定前需要使用的密码
requirepass 123456
# 当master服务设置了密码保护时(用requirepass制定的密码)
# slave服务连接master的密码
masterauth 123456
#daemonize no 将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
daemonize no
# 任何主机都可以连接到redis
bind 0.0.0.0
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。
protected-mode no
# 默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。
# 所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。
# 开启append only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。
# 但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof 进行重新整理。
# 你可以同时开启asynchronous dumps 和 AOF
appendonly yes
#集群开关,默认是不开启集群模式。
cluster-enabled yes
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
cluster-config-file nodes.conf
#节点互连超时的阀值。集群节点超时毫秒数
cluster-node-timeout 15000
#在某些部署中,Redis群集节点地址发现失败,因为地址是NAT ted的,或者因为端口是转发的(典型情况是Docker和其他容器
#为了使Redis集群在这样的环境中工作,静态每个节点都知道需要其公共地址的配置。这个
cluster-announce-ip 192.168.88.7
#客户端端口
cluster-announce-port ${PORT}
#总线端口 为 port+10000
cluster-announce-bus-port 1${PORT}

node2服务器redis-cluster.tmpl

#端口号
port ${PORT}
#设置客户端连接后进行任何其他指定前需要使用的密码
requirepass 123456
# 当master服务设置了密码保护时(用requirepass制定的密码)
# slav服务连接master的密码
masterauth 123456
#daemonize no 将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
daemonize no
# 任何主机都可以连接到redis
bind 0.0.0.0
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。
protected-mode no
# 默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。
# 所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。
# 开启append only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。
# 但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof 进行重新整理。
# 你可以同时开启asynchronous dumps 和 AOF
appendonly yes
#集群开关,默认是不开启集群模式。
cluster-enabled yes
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
cluster-config-file nodes.conf
#节点互连超时的阀值。集群节点超时毫秒数
cluster-node-timeout 15000
#在某些部署中,Redis群集节点地址发现失败,因为地址是NAT ted的,或者因为端口是转发的(典型情况是Docker和其他容器
#为了使Redis集群在这样的环境中工作,静态每个节点都知道需要其公共地址的配置。这个
cluster-announce-ip 192.168.88.8
#客户端端口
cluster-announce-port ${PORT}
#总线端口 为 port+10000
cluster-announce-bus-port 1${PORT}

node3服务器redis-cluster.tmpl

#端口号
port ${PORT}
#设置客户端连接后进行任何其他指定前需要使用的密码
requirepass 123456
# 当master服务设置了密码保护时(用requirepass制定的密码)
# slav服务连接master的密码
#
masterauth 123456
#daemonize no 将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
daemonize no
# 任何主机都可以连接到redis
bind 0.0.0.0
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。
protected-mode no
# 默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。
# 所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。
# 开启append only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。
# 但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof 进行重新整理。
# 你可以同时开启asynchronous dumps 和 AOF
appendonly yes
#集群开关,默认是不开启集群模式。
cluster-enabled yes
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
cluster-config-file nodes.conf
#节点互连超时的阀值。集群节点超时毫秒数
cluster-node-timeout 15000
#在某些部署中,Redis群集节点地址发现失败,因为地址是NAT ted的,或者因为端口是转发的(典型情况是Docker和其他容器
#为了使Redis集群在这样的环境中工作,静态每个节点都知道需要其公共地址的配置。这个
cluster-announce-ip 192.168.88.9
#客户端端口
cluster-announce-port ${PORT}
#总线端口 为 port+10000
cluster-announce-bus-port 1${PORT}

3-2 创建redis.conf配置文件和data文件

node1服务器mkdir.sh

for port in `seq 6381 6382`; do \mkdir -p ${port}/conf \PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \mkdir -p ${port}/data;\done

node2服务器mkdir.sh

for port in `seq 6383 6384`; do \mkdir -p ${port}/conf \PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \mkdir -p ${port}/data;\done

node3服务器mkdir.sh

for port in `seq 6385 6386`; do \mkdir -p ${port}/conf \PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \mkdir -p ${port}/data;\done

执行mkdir.sh文件
在这里插入图片描述

3-3 创建redis容器

node1服务器

docker run -d --name redis-6381 --net host --privileged=true \
-v /opt/redis-cluster/6381/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis-cluster/6381/data:/data \
redis:6.0.8 redis-server /etc/redis/redis.conf
docker run -d --name redis-6382 --net host --privileged=true \
-v /opt/redis-cluster/6382/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis-cluster/6382/data:/data \
redis:6.0.8 redis-server /etc/redis/redis.conf

node2服务器

docker run -d --name redis-6383 --net host --privileged=true \
-v /opt/redis-cluster/6383/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis-cluster/6383/data:/data \
redis:6.0.8 redis-server /etc/redis/redis.conf
docker run -d --name redis-6384 --net host --privileged=true \
-v /opt/redis-cluster/6384/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis-cluster/6384/data:/data \
redis:6.0.8 redis-server /etc/redis/redis.conf

node3服务器

docker run -d --name redis-6385 --net host --privileged=true \
-v /opt/redis-cluster/6385/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis-cluster/6385/data:/data \
redis:6.0.8 redis-server /etc/redis/redis.conf
docker run -d --name redis-6386 --net host --privileged=true \
-v /opt/redis-cluster/6386/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis-cluster/6386/data:/data \
redis:6.0.8 redis-server /etc/redis/redis.conf

3-4 创建 Redis Cluster 集群

随便进入一个容器并为6台机器构建集群关系,–cluster-replicas 1 表示为每个master创建一个slave节点

docker exec -it redis-6381 bash
redis-cli -a 123456 --cluster create 192.168.88.7:6381 192.168.88.7:6382 192.168.88.8:6383 192.168.88.8:6384 192.168.88.9:6385 192.168.88.9:6386 --cluster-replicas 1

如果连接不上其他服务器的redis或者长时间处于连接状态,可以检查一下以下端口是否开放

# node1
firewall-cmd --zone=public --add-port=6381/tcp --permanent
firewall-cmd --zone=public --add-port=6382/tcp --permanent
firewall-cmd --zone=public --add-port=16381/tcp --permanent
firewall-cmd --zone=public --add-port=16382/tcp --permanent
firewall-cmd --reload# node2
firewall-cmd --zone=public --add-port=6383/tcp --permanent
firewall-cmd --zone=public --add-port=6384/tcp --permanent
firewall-cmd --zone=public --add-port=16383/tcp --permanent
firewall-cmd --zone=public --add-port=16384/tcp --permanent
firewall-cmd --reload# node3
firewall-cmd --zone=public --add-port=6385/tcp --permanent
firewall-cmd --zone=public --add-port=6386/tcp --permanent
firewall-cmd --zone=public --add-port=16385/tcp --permanent
firewall-cmd --zone=public --add-port=16386/tcp --permanent
firewall-cmd --reload
# 查看防火墙开放端口信息
firewall-cmd --list-all 
# 查看防火墙端口是否开放
firewall-cmd --query-port=8080/tcp

其他错误:[ERR] Node 192.168.88.7:6381 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决:删除每个服务器每个节点下面data文件下的nodes.conf、appendonly.aof文件,重启节点
在这里插入图片描述

3-4 其他

# 连接redis查看集群信息 -c表示使用集群模式
redis-cli -c -h 192.168.88.7 -p 6381auth 123456cluster info
# 查询集群节点信息
cluster nodes

在这里插入图片描述

4、加入portainer

1. 编辑docker.service
vim /usr/lib/systemd/system/docker.service
找到 ExecStart字段修改如下
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock2. 重启docker重新读取配置文件,重新启动docker服务
systemctl daemon-reload
systemctl restart docker3.开放2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload

在这里插入图片描述
在这里插入图片描述

5、安装nginx

5-1 创建映射目录

mkdir -p /home/nginx/www /home/nginx/logs /home/nginx/conf

5-2 编辑nginx.conf配置文件

vim /home/nginx/conf/nginx.conf

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;server{listen 80;server_name localhost;charset utf-8;location / {root   /usr/share/nginx/html/;try_files $uri $uri/ =404;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

5-3 编写docker-compose.yml文件

#部署的服务器需要安装docker compose
安装可参考:Docker+Harbor私有仓库快速搭建

vim /home/nginx/docker-compose.yml
version: '3.3'
services:nginx:image: nginxrestart: alwayshostname: nginxcontainer_name: nginxprivileged: trueports:- 80:80volumes:- ./conf/nginx.conf:/etc/nginx/nginx.conf- ./www/:/usr/share/nginx/html/- ./logs/:/var/log/nginx/

5-4 启动

docker compose up -d

5-5 测试

vim /home/nginx/www/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>nginx</title>
</head>
<body><h1>首页</h1>
</body>
</html>

在这里插入图片描述

6、安装nacos2.1.1集群

官网:https://nacos.io/zh-cn/docs/v2/guide/admin/cluster-mode-quick-start.html

6-1 mysql创建nacos_config数据库

sql文件链接
在这里插入图片描述

6-2 开放端口

# node1、node2、node3
firewall-cmd --zone=public --add-port=8848/tcp --permanent
firewall-cmd --reload

6-3 创建容器

node1服务器执行

# --配置主机ip和端口
# --配置数据库主机、用户名、密码、数据库名
# --net=host 主机模式
docker run -d \
-e PREFER_HOST_MODE=hostname \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS="192.168.88.7:8848 192.168.88.8:8848 192.168.88.9:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.88.7 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=192.168.88.7 \
-p 8848:8848 \
--restart=always \
--net=host \
--name nacos1 \
nacos/nacos-server:v2.1.1

node2服务器执行

docker run -d \
-e PREFER_HOST_MODE=hostname \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS="192.168.88.7:8848 192.168.88.8:8848 192.168.88.9:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.88.7 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=192.168.88.8 \
-p 8848:8848 \
--restart=always \
--net=host \
--name nacos2 \
nacos/nacos-server:v2.1.1

node3服务器执行

docker run -d \
-e PREFER_HOST_MODE=hostname \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS="192.168.88.7:8848 192.168.88.8:8848 192.168.88.9:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.88.7 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=192.168.88.9 \
-p 8848:8848 \
--restart=always \
--net=host \
--name nacos3 \
nacos/nacos-server:v2.1.1

在这里插入图片描述

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

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

相关文章

PHP实现在线进制转换器,10进制,2、4、8、16、32进制转换

1.接口文档 2.laravel实现代码 /*** 进制转换计算器* return \Illuminate\Http\JsonResponse*/public function binaryConvertCal(){$ten $this->request(ten);$two $this->request(two);$four $this->request(four);$eight $this->request(eight);$sixteen …

echarts 横向柱状图

<template><div ref"chart" style"height: 100%"></div> </template><script> import * as echarts from "echarts"; var cate ["质量通病1", "质量通病2", "质量通病3", "质…

“可一学院”区块链学习平台正式启动,助力BSV技术普及与传播

2023年8月8日&#xff0c;上海可一澈科技有限公司&#xff08;以下简称“可一科技”&#xff09; 正式发布区块链学习平台“可一学院”。“可一学院” 立足于BSV区块链技术本源&#xff0c;汇集了多层次的专业课程和学习资源&#xff0c;致力于打造一个适合各类人群使用的一站式…

数据结构——双向链表

双向链表实质上是在单向链表的基础上加上了一个指针指向后面地址 单向链表请参考http://t.csdn.cn/3Gxk9 物理结构 首先我们看一下两种链表的物理结构 我们可以看到&#xff1a;双向在单向基础上加入了一个指向上一个地址的指针&#xff0c;如此操作我们便可以向数组一样操作…

基于Crow的C++的WebSocket服务器

基于Crow的C的WebSocket服务器 一、WebSocket 1.1 什么是WebSocket WebSocket 是一种持久化的通讯协议。 很多网站为了实现推送技术&#xff0c;所用的技术都是轮询&#xff0c;这种解决方案是指由浏览器每隔一段时间向服务器发出 HTTP 请求&#xff0c;然后服务器返回最新的…

Qt自定义对话框

介绍 自定义框主要通过对现有对话框QDialog类的派生&#xff0c;根据需求编写成员函数、重载信号函数、槽函数&#xff0c;进而实现在主QWidget中点击某个按钮后&#xff0c;一个对话框的弹出 流程 简化创建派生类 最后点击完成即可。 自定义ui界面&#xff0c;编写成员函数…

产品体系架构202308版

1.前言 当我们不断向前奔跑时&#xff0c;需要回头压实走过的路。不断扩张的同时把相应的内容沉淀下来&#xff0c;为后续的发展铺垫基石。 不知从何时起&#xff0c;产品的架构就面向了微服务/中台化/前后端分离/低代码化/分布式/智能化/运行可观测化的综合体&#xff0c;让…

Git与Github常用方法

目录 1. Github基本使用方法2. Git使用方法3. git、VS code、Github联合使用方法4. Git配置Github远程仓库SSH密钥5. 常见问题 1. Github基本使用方法 仓库&#xff08;Repository&#xff09;&#xff1a;Github上用来存放代码的空间&#xff0c;包含代码、文档和其他文件。提…

逆向破解学习-经典贪吃蛇大作战_1.00

试玩游戏 有支付取消关键字 找静态代码 找到关键字 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5d9f3cc57d18477794197ea5fae8c5ba.png Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; import de.r…

Java 本地缓存之王:Caffeine 保姆级教程

一、Caffeine介绍 1、缓存介绍 缓存(Cache)在代码世界中无处不在。从底层的CPU多级缓存&#xff0c;到客户端的页面缓存&#xff0c;处处都存在着缓存的身影。缓存从本质上来说&#xff0c;是一种空间换时间的手段&#xff0c;通过对数据进行一定的空间安排&#xff0c;使得下…

vxe-grid\table 自定义动态列排序设置

实现动态加载的表格数据&#xff0c;根据设置动态控制指定的某些字段排序功能&#xff1b;如下图所示&#xff1b; 代码实现&#xff1a;标签内添加属性&#xff1b; :sort-config"{trigger:cell, defaultSort: {field: , order: desc}, orders:[desc, asc]}" sort-…

OneFlow 中的 Softmax

Softmax 是深度学习模型中的常见算子。PyTorch 的 Softmax 算子直接调用 cuDNN 的接口。而 OneFlow 内部针对输入数据的类别数量&#xff0c;采用3个 kernel 来分别处理&#xff0c;在多数情况下都可以获得比 cuDNN 更优的性能表现。下面对其实现进行介绍。OneFlow 的静态分层结…

快速修复应用程序中的问题的利器—— Android热修复

热修复技术在Android开发中扮演着重要的角色&#xff0c;它可以帮助开发者在不需要重新发布应用程序的情况下修复已经上线的应用程序中的bug或者添加新的功能。 一、热修复是什么&#xff1f; 热修复&#xff08;HotFix&#xff09;是一种在运行时修复应用程序中的问题的技术…

-bash: fork: retry: Resource temporarily unavailable 问题解决

错误提示&#xff1a; -bash: fork: retry: Resource temporarily unavailable 错误分析&#xff1a;之前已经出现过这种资源限制的报错提醒&#xff0c;然后整个系统可用的连接数就已经用完了&#xff0c;无法使用工具来获取系统信息&#xff0c;所以将运行的任务脚本kill后开…

PHP序列化,反序列化

一.什么是序列化和反序列化 php类与对象 类是定义一系列属性和操作的模板&#xff0c;而对象&#xff0c;就是把属性进行实例化&#xff0c;完事交给类里面的方法&#xff0c;进行处理。 <?php class people{//定义类属性&#xff08;类似变量&#xff09;,public 代表可…

MySQL高级-存储引擎+存储过程+索引(详解01)

目录 1.mysql体系结构 2.存储引擎 2.1.存储引擎概述 2.2.1.InnoDB 2.2.2.MyISAM 2.2.3.存储引擎选择 3.存储过程 3.1.存储过程和函数概述 3.2.创建存储过程 3.3.调用存储过程 3.4.查看存储过程 3.5.删除存储过程 3.6.语法 3.6.1.变量 3.6.2.if条件判断 3.6.3.…

知网期刊《中阿科技论坛》简介及投稿须知

知网期刊《中阿科技论坛》简介及投稿须知 主管单位&#xff1a;宁夏回族自治区科学技术厅 主办单位&#xff1a;宁夏回族自治区对外科技交流中心(中国一阿拉伯国家技术转移中心) 刊  期&#xff1a;月刊 国际刊号&#xff1a;ISSN 2096-7268 国内刊号&#xff1a;CN 64-…

基于Doris实时数据开发的一些注意事项

300万字&#xff01;全网最全大数据学习面试社区等你来&#xff01; 最近Doris的发展大家是有目共睹的。例如冷热分离等新特性的持续增加。使得Doris在易用和成本上都有大幅提升。 基于Doris的一些存储实时数仓在越来越多的场景中开始有一些实践。大家也看到了这种方案频繁出现…

MYSQL进阶-查询优化- 实战 STATUS

回城传送–》《100天精通MYSQL从入门到就业》 文末有送书活动&#xff0c;可以参加&#xff01; 文章目录 一、练习题目二、SQL思路SQL进阶-查询优化- SHOW STATUS初始化数据解法SHOW STATUS是什么实战经验&#xff1a;常用的mysql状态查询1、QPS(每秒处理的请求数量)计算思路…