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

Docker+Django项目部署-从Linux+Windows实战

一、概述

1. 什么是Docker

Docker 是一个开源的应用容器引擎,支持在win、mac、Linux系统上进行安装。可以帮助我们在一台电脑上创建出多个隔离的环境,比传统的虚拟机极大的节省资源

  • 为什么要创建隔离的环境?
假设你先在有一个centos7.6系统运行程序,而这个程序需要依赖【ubuntu系统的服务A】 + 【centos7.9的服务B】- 传统的方式:买新服务器- 虚拟化方式:在原来的NB服务器上利用虚拟化技术创建虚拟机(vmware、kvm等),用虚拟机做隔离去跑新的业务。- docker的方式:利用docker软件创建一个新的容器,用容器去做隔离区跑新的业务。
  • 为什么docker可以比虚拟机极大的节省资源?
 - 虚拟机的方式,是在电脑完整的创建一个操作系统。- docker的方式,创建的容器不是完整的操作系统,而是充分利用宿主机内核+进程,只是创建了一些必备的资源。

在这里插入图片描述

2. 概念

在这里插入图片描述

  • DockerHub,远程镜像仓库。https://hub.docker.com/
    仓库中有官方的一些镜像文件,也有开发者自定义的镜像文件。
    
  • Images,本地镜像仓库。
    可以去远程仓库下载镜像到本地仓库,后续再根据镜像为“模版”去创建容器。本地的镜像也可以发布到远程镜像库。
    
    • 镜像是之前用虚拟机创建操作系统时的ISO文件吗?
    不是,此处是docker中的特殊的文件
    
    • 镜像是个什么样的文件?
    镜像就是充当模版来使用,在他得内部包含打包好了的:运行所需依赖 + 业务代码。
    后期基于镜像一键创建出的容器也就会自动包含依赖和业务代码,直接就可以运行了,不需要再安装+拷贝代码了。
    
  • Containers,容器
    容器就是根据镜像创造出来的一个个隔离的环境。
    
    在这里插入图片描述

二、服务器准备

在这里插入图片描述

  • 学习环境:win电脑 -> centos7虚拟机【docker】 -> docker容器
  • 线上环境:云平台 -> 购买云主机【docker】 -> docker容器

1. 环境准备

  • 在win电脑安装:vmware工具 + 创建centos系统(初始化)

1.1 VMware

  • 下载安装:

在这里插入图片描述

  • 虚拟化支持:
    在这里插入图片描述
    在这里插入图片描述
    注意:开启后重启即可,如果电脑提示无法启动,则需要先进入bios在主板中设置开启支持Hyper-V。

2. CentOS系统

清华大学开源软件镜像站
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

>>>uname -r
>>>cat /etc/redhat-release

在这里插入图片描述

3. 网络配置

  • 默认登录无法上网,需要配置下网络才行

3.1 Win电脑

配置DNS和网关
在这里插入图片描述

3.2 CentOS主机

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

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static         # 由原来的dhcp改成static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=cfbd5cd7-fa17-48e6-9d13-715f33e1f08d
DEVICE=ens33
ONBOOT=yes              # 由原来的no改成yes
IPADDR=192.168.115.133  # 新增,当前主机的IP
GATEWAY=192.168.115.2   # 网关
NETMASK=255.255.255.0   # 掩码
DNS1=8.8.8.8            # NDS服务器
DNS2=8.8.4.4            # NDS服务器

在这里插入图片描述

service network restart
systemctl restart network

重启后,可以ping百度测试:

ping baidu.com

在这里插入图片描述

4. 系统初始化

  • 关闭selinux (vi /etc/selinux/config)
    • 查看状态
      getenforce
      
    • 临时关闭
      setenforce    0
      
    • 永久关闭
      vi /etc/selinux/config
      
      # 设置为disabled
      SELINUX=disabled
      
  • 防火墙
    • 查看防火墙状态
      systemctl status firewalld
      
    • 关闭
      systemctl stop firewalld
      
    • 关闭开机启动防火墙
      systemctl disable firewalld
      
  • net-tools
    yum install net-tools -y
    
  • openssh-server
    yum install openssh-server -y
    
    systemctl start sshd.service
    
    systemctl enable sshd.service
    
  • 可以在win上用xshell等工具SSH连接centos
  • wget
    yum install wget -y
    
  • centos常用工具包
    yum install -y wget bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
    

三、安装Docker

1. 安装docker-ce社区版

  • 配置repo源
    curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum clean all && yum makecache
    
    在这里插入图片描述
  • 查看可下载版本
    yum list docker-ce --showduplicates | sort -r
    
  • 安装
    # 最新版
    yum install -y docker-ce# 指定版本
    yum install -y docker-ce-23.0.6
    
    在这里插入图片描述

2. 启动docker-ce社区版

  • 设置开机启动

    systemctl enable docker 
    
  • 启动docker

    systemctl start docker  
    
    systemctl restart docker 
    

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

  • 下载镜像

    docker pull ubuntu
    

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

  • 停止docker

    systemctl stop docker  
    
  • 其他

    ## 查看docker信息
    docker version## 查看docker信息
    docker info## docker-client
    which docker## docker daemon
    ps -ef |grep docker
    

3. 宿主机网卡转发(端口转发)

cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/docker.conf

在这里插入图片描述

4. 配置镜像加速

  • 类似于pip源,以后在docker中下载镜像时,使用加速器,下载就会比较快。
    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors注册自己的帐号
    在这里插入图片描述
  • https://www.daocloud.io/mirror#accelerator-doc注册账号也有加速器地址
    在这里插入图片描述
sudo mkdir -p /etc/docker			# 指定目录
sudo tee /etc/docker/daemon.json <<-'EOF'		# 创建目录后创建文件(daemon.json),写入内容
{"registry-mirrors": ["https://t57hdrx1.mirror.aliyuncs.com","http://f1361db2.m.daocloud.io"]
}
EOF

在这里插入图片描述

systemctl daemon-reload
systemctl restart docker 

在这里插入图片描述

四、实战篇:部署Flask网站

需求:基于docker创建在Ubuntu18.04系统上运行开发的Flask网站。
流程:

  • 在centos7.9+安装docker
  • 基于docker软件
    • 获取基础镜像Ubuntu18.04
    • 在基础镜像基础上构建自定义镜像【Ubuntu18.04+python+代码】
    • 基于镜像创建容器+运行

4.1 下载基础镜像

https://hub.docker.com/_/ubuntu/tags
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@192 ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
[root@192 ~]#
[root@192 ~]#
[root@192 ~]# docker pull ubuntu:18.04
[root@192 ~]#
[root@192 ~]#
18.04: Pulling from library/ubuntu
284055322776: Pull complete 
Digest: sha256:0fedbd5bd9fb72089c7bbca476949e10593cebed9b1fb9edf5b79dbbacddd7d6
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
[root@192 ~]# 
[root@192 ~]# 
[root@192 ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
ubuntu         18.04     5a214d77f5d7   20 months ago    63.1MB
[root@192 ~]# 
[root@192 ~]# 

在这里插入图片描述

4.2 构建镜像

4.2.1 编写Dockerfile+语法

  • 在docker宿主机centos7.9创建2个文件:
    • Dockerfile
    • app.py
# Dockerfile# Base images 基础镜像
FROM ubuntu:18.04		# from就是基于那个基础的镜像(基于Ubuntu:18.04)#MAINTAINER 维护者信息
LABEL MAINTAINER   xxx  xxx@live.com	# 自定义的作者是谁#RUN 执行以下命令
RUN apt update
RUN apt install python3  python3-pip  -y
RUN pip3 install flask
RUN mkdir -p /data/www/#拷贝文件至工作目录
COPY app.py  /data/www/app.py#工作目录
WORKDIR /data/www/#EXPOSE 映射端口
EXPOSE 80#容器启动时执行命令
CMD ["python3","app.py"]
from flask import Flaskapp = Flask(__name__)@app.route("/index")
def index():return "欢迎光临红浪漫"if __name__ == "__main__":app.run(host="0.0.0.0",port=8000)

4.2.2 命令创建自定义镜像(模板)

 docker build  -t  Stara/v0:0.1  .  -f Dockerfile # docker build:用于从 Dockerfile 构建一个 Docker 镜像。
# -t:--tag 的简写,用于指定镜像的名称和标签。
# Stara/v0:0.1  - Stara 是镜像的仓库名称(repository)。- v0 是镜像的名称(name)。- 0.1 是镜像的标签(tag),通常用于版本控制。. 表示当前目录下寻找 Dockerfile 并构建镜像。-f 是 --file 的简写,用于指定 Dockerfile 的文件名。

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

4.2.3 基于镜像创建容器+运行

docker run xxx/web1:1.0
# 但是网站对外访问不了,要做端口转发

在这里插入图片描述

docker run -p 80:8000 xxx/web1:1.0
# 80 当前宿主机centos监听的端口,转发给8000(代码写的8000)

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

docker run -d -p 80:8000 xxx/web1:1.0
# -d表示在后台运行,代码不需要停止,返回的这一串是创建的容器id

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

docker ps
# 罗列出来目前正在运行的所有容器,用的同一个镜像,容器名字随机生成的

在这里插入图片描述

docker run -d -p 84:8000 --name v222 xxx/web1:1.0
# 指定名字叫v222

在这里插入图片描述

# 查看所有容器,包括正在运行的和已经停止的docker ps -a

在这里插入图片描述

#  停止容器 ID 为 550(前三位id数字) 的容器
docker  stop 550

在这里插入图片描述

# 停下来没有用了,删除
docker rm 550

在这里插入图片描述

4.3 在Dockerfile编写的指令意思

  • FROM 指定基础镜像,必须为第一个命令
    格式:FROM <image>FROM <image>:<tag>
    示例:FROM mysql:5.7
    注意:tag是可选的,如果不使用tag时,会使用latest版本的基础镜像
    
  • MAINTAINER 镜像维护者的信息
    格式:MAINTAINER <name>
    示例:MAINTAINER xxxMAINTAINER xxx@live.comMAINTAINER xxx<wupeiqi@live.com>
    
  • ENV
    格式:ENV <key> <value>ENV <key>=<value>
    示例:ENV myName JohnENV myCat=fluffy
    
  • COPY|ADD 添加本地文件到镜像中
    格式:COPY <src>... <dest>
    示例:ADD hom* /mydir/          # 添加所有以"hom"开头的文件ADD test relativeDir/     # 添加 "test" 到 $WORKDIR/relativeDir/ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/注意:针对压缩包使用ADD的话,会自动解压。
    
  • WORKDIR 工作目录
    格式:WORKDIR /path/to/workdir
    示例:WORKDIR /a  (这时工作目录为/a)
    注意:通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行
    
  • RUN 构建镜像过程中执行命令
    格式:RUN <command>
    示例:RUN yum install nginxRUN pip install djangoRUN mkdir test && rm -rf /var/lib/unusedfiles
    注意:RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
    

相关文章:

Docker+Django项目部署-从Linux+Windows实战

一、概述 1. 什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;支持在win、mac、Linux系统上进行安装。可以帮助我们在一台电脑上创建出多个隔离的环境&#xff0c;比传统的虚拟机极大的节省资源 。 为什么要创建隔离的环境&#xff1f; 假设你先在有一个centos7.…...

前端 JS 实用操作总结

目录 1、重构解构 1、数组解构 2、对象解构 3、...展开 2、箭头函数 1、简写 2、this指向 3、没有arguments 4、普通函数this的指向 3、数组实用方法 1、map和filter 2、find 3、reduce 1、重构解构 1、数组解构 const arr ["唐僧", "孙悟空&quo…...

11.15 机器学习-集成学习方法-随机森林

# 机器学习中有一种大类叫**集成学习**&#xff08;Ensemble Learning&#xff09;&#xff0c;集成学习的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话&#xff1a; # 三个臭皮匠&#xff0c…...

【SQL】E-R模型(实体-联系模型)

目录 一、介绍 1、实体集 定义和性质 属性 E-R图表示 2. 联系集 定义和性质 属性 E-R图表示 一、介绍 实体-联系数据模型&#xff08;E-R数据模型&#xff09;被开发来方便数据库的设计&#xff0c;它是通过允许定义代表数据库全局逻辑结构的企业模式&#xf…...

C/C++静态库引用过程中出现符号未定义的处理方式

问题背景&#xff1a; 在接入新库&#xff08;静态库&#xff09;时遇到了符号未定义问题&#xff0c;并发现改变静态库的链接顺序可以解决问题。 问题根源&#xff1a; 静态库是由 .o 文件拼接而成的&#xff0c;链接静态库时&#xff0c;链接器以 .o 文件为单位进行处理。链接…...

『VUE』27. 透传属性与inheritAttrs(详细图文注释)

目录 什么是透传属性&#xff08;Forwarding Attributes&#xff09;使用条件唯一根节点禁用透传属性继承总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 什么是透传属性&#xff08;Forwarding Attributes&#xff09; 在 V…...

借助Excel实现Word表格快速排序

实例需求&#xff1a;Word中的表格如下图所示&#xff0c;为了强化记忆&#xff0c;希望能够将表格内容随机排序&#xff0c;表格第一列仍然按照顺序编号&#xff0c;即编号不跟随表格行内容调整。 乱序之后的效果如下图所示&#xff08;每次运行代码的结果都不一定相同&#x…...

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同&#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式&#xff0c;如上图&#xff1a;层序遍历的…...

使用 Prompt API 与您的对象聊天

tl;dr&#xff1a;GET、PUT、PROMPT。现在&#xff0c;可以使用新的 PromptObject API 仅使用自然语言对存储在 MinIO 上的对象进行总结、交谈和提问。在本文中&#xff0c;我们将探讨这个新 API 的一些用例以及代码示例。 赋予动机&#xff1a; 对象存储和 S3 API 的无处不在…...

SpringBoot整合Mybatis-Plus实践汇总

相关依赖 MyBatis-Plus涉及的依赖主要是Mybatis-start、和分页插件的依赖&#xff0c;不考虑使用额外分页插件的前提下&#xff0c;只需要mybatis-plus-boot-starter一个依赖即可与SpringBoot集成&#xff1a; <!--Mybatis-plugs--><dependency><groupId>co…...

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

Python实现人脸识别算法并封装为类库

引言 人脸识别技术在现代社会中应用广泛&#xff0c;从安全监控到智能门锁&#xff0c;再到社交媒体中的照片标记功能&#xff0c;都离不开这项技术。本文将详细介绍如何使用Python实现基本的人脸识别算法&#xff0c;并将其封装为一个类库&#xff0c;以便在多个项目中复用。…...

uniapp小程序分享使用canvas自定义绘制 vue3

使用混入结合canvas做小程序的分享 在混入里面定义一个全局共享的分享样式&#xff0c;在遇到特殊页面需要单独处理 utils/share.js import { ref } from vue; export default {onShow() {// 创建时设置统一页面的默认值uni.$mpShare {title: 分享的标题,path: /pages/home/…...

SpringCloud核心组件(四)

文章目录 NacosNacos 配置中心1.起源2.基本概念ProfileData IDGroup 3.基础配置a. bootstrap.ymlb. application.ymlc. nacos 中的配置 DataIDd.测试读取配置中心配置内容 4.配置隔离a.命名空间b.DataIDc.bootstrap.ymld.service 隔离 5.配置拆分a.配置拆分策略b.DataID 配置c.…...

如何把本地docker 镜像下载用到centos系统中呢?

如果需要将镜像下载到本地或在 CentOS 系统上使用该镜像&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 拉取镜像 如果想将镜像从 Docker Hub 或其他镜像仓库下载到本地&#xff0c;可以使用 docker pull 命令。 如果使用的是本地构建的镜像&#xff08;如 isc:v1.0.0&…...

Godot的开发框架应当是什么样子的?

目录 前言 全局协程还是实例协程&#xff1f; 存档&#xff01; 全局管理类&#xff1f; UI框架&#xff1f; Godot中的异步&#xff08;多线程&#xff09;加载 Godot中的ScriptableObject 游戏流程思考 结语 前言 这是一篇杂谈&#xff0c;主要内容是对我…...

GitHub新手入门 - 从创建仓库到协作管理

GitHub新手入门 - 从创建仓库到协作管理 GitHub 是开发者的社交平台&#xff0c;同时也是代码托管的强大工具。无论是个人项目、开源协作&#xff0c;还是团队开发&#xff0c;GitHub 都能让你轻松管理代码、版本控制和团队协作。今天&#xff0c;我们将从基础开始&#xff0c…...

作业25 深度搜索3

作业&#xff1a; #include <iostream> using namespace std; bool b[100][100]{0}; char map[100][100]{0}; int dx[4]{0,1,0,-1}; int dy[4]{1,0,-1,0}; int n,m; int sx,sy,ex,ey; int mink2147483647; void dfs(int,int,int); int main(){cin>>n>>m;for(…...

ubuntu20.04 colmap 安装2024.11最新

很多教程都很落后了&#xff0c;需要下载压缩包解压编译的很麻烦 现在就只需要apt install就可以了 apt更新 sudo apt update && sudo apt-get upgrade安装依赖 #安装依赖 sudo apt-get install git cmake ninja-build build-essential libboost-program-options-de…...

WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇

WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule [WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇]&#xff08;本文&#xff09; WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...