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

Docker网络和overlay的基础讲解

 本人发现了两篇写的不错的文章:Docker网络 - docker network详解-CSDN博客,Docker 容器跨主机通信 overlay_docker overlay 网络-CSDN博客

 因为这两篇文章中含有大量的例子,新手看起来毫不费力。于是我偷了个小懒,在本篇文章中没有写一些例子,只写了他们没有的例子。所以本篇更像是他俩的补充。所以新手完全可以先看他俩的文章,然后再回来看一下我补充了哪些。

一:Docker网络的作用

1. 容器与外界通信
2. 容器间通讯,跨主机容器间通讯
3. 网络隔离(容器网络命名空间、子网隔离)
4. 提供网络自定义能力
5. 提供容器间发现功能
6. 提供负载均衡能力

常用的基本命令:

//连接一个容器到一个网络
docker network connect     Connect a container to a network
//创建一个网络
docker network create      Create a network
//将容器从一个网络中断开
docker network disconnect  Disconnect a container from a network
//查看网络的详细信息
docker network inspect     Display detailed information on one or more networks
//查看网络列表
docker network ls          List networks
//移除所有未使用的网络
docker network prune       Remove all unused networks
//移除一个或多个网络
docker network rm          Remove one or more network

二:网络驱动

1:bridge(网桥网络)

1. bridge是docker默认的网络驱动程序。如果没有指定驱动程序,这就是正在创建的网络类型。当应用程序在需要与同一主机上的其他容器通信的容器中运行时,通常会使用桥接网络。
2. 就联网而言,桥接网络是在网段之间转发流量的链路层设备,链路层设备Mac地址进行通信。桥接器可以是在主机内核运行的硬件设备或者软件设备。
3. 就docker而言,网桥网络为软件网桥。允许连接到同一网桥的容器进行通讯,同时提供与未连接到该网桥的容器的隔离。不同网桥上的容器无法直接通讯。
4. 启动docker时,会自动创建一个名为docker0的网桥网络,并且新启动的容器会默认连接到该网络。

a8896a40edb34c8abf4f2128a5915173.png

        网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);每个容器实例内部也有一块网卡,每个接口叫eth0;docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。

2:host(主机网络)

1. Host模式,即容器网络不会与宿主机产生网络隔离,而是使用主机的网络栈,容器不会分配自己的IP地址。运行容器是所有端口映射的选项都将失效,并且在使用时产生警告信息。主机模式可以用于性能优化,因为主机模式下无需网络地址转换(NAT),并且不会为每个端口创建userland-proxy(在默认情况下,Docker使用Userland Proxy作为默认的端口转发机制。Userland Proxy基于iptables规则进行转发,将容器内部的网络流量通过宿主机上的特定端口进行转发。)
2. Host模式,仅适用于linux主机,Mac和windows主机不支持
3. docker run 或docker service create 通过指定--network host 来使用主机网络。该模式下集群节点上运行容器将受到限制(例如:容器端口为80端口,由于使用主机网络,则每个集群节点仅能运行一个80端口的容器)

3:none

如果要完全隔离容器的网络堆栈,可以在启动容器时使用--network-none标志。在容器中,只创建环回设备

4:自定义网络

1:由于创建的容器加入默认网络之后,我们的容器IP是会发生变化的,我们此时通过pingIP地址是可以PIng通的,但是为了服务方便,我们不会去记住他们的ip地址,而是通过ping他们的服务名,但是我们通过在默认网络里面,去ping服务名,是ping不通的。

        因此我们需要实现自定义的网络,因为在自定义网络里面,在同一个网络中的容器IP地址,会被自动解析。这样我们就可以通过ping服务名即可通讯。

2:我们在自定义网络的时候,我们还可以指定这个网络的网关,子网,ip,以及一些特定选项。

docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--ip-range=172.28.5.0/24 \
--gateway=172.28.5.254 \
--opt com.docker.network.bridge.name=alpine-net1 \            #指定网络的名称
--opt com.docker.network.bridge.enable_ip_masquerade=false \  #禁用ip伪装,造成无法访问外网
--opt com.docker.network.bridge.enable_icc=false \            #禁止容器间进行相互访问,并不代表不能进行DNS解析
--opt com.docker.network.container_iface_prefix=ethnick \     #指定网络接口的前缀
alpine-net1        #网络名称

5:container

新建的容器和已经存在的一个容器共享一个网络IP配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

三:Overlay(覆盖网络)

1:默认的overlay

1. overlay网络驱动程序在多个Docker守护进程主机之间创建分布式网络。该网络位于(覆盖)特定于主机的网络之上,允许连接到该网络的容器(包括群集服务容器)在启用加密时安全通信。Docker透明地处理每个数据包往返于正确的Docker守护进程主机和正确的目标容器的路由
2. 初始化一个swarm集群或将Docker主机加入现有swarm集群时,会在该Docker主机上创建两个新网络:
        1. 名为ingress的overlay网络,处理与swarm service相关的控制和数据流量。创建一个service没有指定自定义网络时,默认将连接到ingress网络。ingress网络提供对容器化应用程序的负载均衡和路由功能。它允许外部流量通过单一入口点访问多个容器,并根据定义的规则将请求转发到适当的后端容器
        2. 名为docker-gwbridge的bridge网络,用于将覆盖网络(包括ingress网络)连接到单个Docker守护程序的物理网络。通过这个网络,容器可以连接到宿主机
        3. 可以使用docker network create创建自定义的overlay网络,方法与创建自定义bridge网络相同。服务或容器一次可以连接到多个网络。服务或容器只能通过各自连接的网络进行通信。

1:初始化swarm集群,会默认创建 ingress 网络和 docker_gwbridge 网络:

7e7542e6c9944a10901d2c25a6da22d1.png

2:添加两个worker节点到集群

ocker swarm join-token worker

d0a966172323411f90963255baadc0c5.png

3:创建service,将加入默认ingress网络

docker service create -p 8080:80 --replicas 3 --name nginx-svc nginx:latest

9185b706570e4ca9adc9fa9592e80f16.png

4:查看ingress 网络明细

docker network inspect ingress

6a4dee25e220413cb33cadd6fa17e247.png

 

7a700fca8264451ba5e0f67c4bbd9127.png

5:查看docker_gwbridge网络详情

docker network inspect docker_gwbridge

cc5aade663dc4d26b511885b8f08406d.png

 6:查看iptables网络转发

bf6e60a6de454283b8fe3ad4a6d4abaa.png

所有发送到本机8080端口的数据被转发到172.18.0.2:8080,172.18.0.2 为docker_gwbridge 网络上ingress_sbox容器的地址,ingress_sbox实为网络命名空间并非容器,通过ingress_sbox网络命名空间连接ingress与docker_gwbridge两个设备。宿主机网络命名空间所在目录:/var/run/docker/netns

7:通过nsenter命令在ingress_sbox命名空间下运行ash 终端(nsenter是一个可以在指定进程的命令空间下运行指定程序的命令)

# 已超级权限启动容器,并在容器中以指定的命名空间运行程序
docker run -dit --rm -v /var/run/docker/netns:/netns --privileged=true \
--name alpine5 myalpine nsenter --net=/netns/ingress_sbox ash
# 与容器交互查看容器中网卡信息ifconfig
docker exec -it alpine5 ash

f4315238f026462b9abcb9299c7c5907.png

ingress_sbox网络命名空间连接了ingress网络与docker_gwbridge网络 

8:通过ipvsadm查看虚拟ip

2af65e4327254902a4fd99cc998d79fa.png

9:示意图

a4f3e7457d334a519294c219bdab0815.png

 2:自定义默认的ingress网络与docker_gwbridge网络

1:使用--ingress 标志创建overlay网络

docker network create \--driver overlay \--ingress \--subnet=10.10.0.0/16 \--gateway=10.10.0.2 \--opt com.docker.network.driver.mtu=1500 \my-ingress

2:创建新的docker_gwbridge网络

docker network create \
--subnet 10.11.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge

3:重新将节点加入集群

4:使用默认网络创建服务验证效果

docker service create -p 8080:80 --replicas 3 --name nginx-svc nginx:latest

5:修改了docker_gwbridge网络的worker节点上运行工具容器

# 已超级权限启动容器,并在容器中以指定的命名空间运行程序
docker run -dit --rm -v /var/run/docker/netns:/netns --privileged=true \
--name alpine5 myalpine nsenter --net=/netns/ingress_sbox ash# 与容器交互查看容器中网卡信息ifconfig
docker exec -it alpine5 ash

c92e9cc7175747dd8cc16a4e3918d167.png

3:自定义overlay网络

1:创建自定义overlay网络

docker network create -d overlay \
--attachable \
--subnet=10.12.0.0/16 \
--subnet=10.13.0.0/16 \
--gateway=10.12.0.100 \
--gateway=10.13.0.100 \
nginx-net
# -–attachable:允许集群服务间的容器交互连接或者独立的容器之间能够连接。 \
swarm在设计之初是为了service(一组container)而服务的,因此通过swarm创建的overlay网络在一开始并不支持单独的container加入其中。但是在docker1.13, \
我们可以通过“–attach” 参数声明当前创建的overlay网络可以被container直接加入。

03868874918d4eb6abba3a7b59792774.png

2:指定网络创建服务

docker service create -p 8081:80 --replicas 3 --name nginx-svc1 --network nginx-net nginx:latest

2ec0436f50fc4859a008ef8a98c435e9.png

ingress: 网络提供对容器化应用程序的负载均衡和路由功能。它允许外部流量通过单一入口点访问多个容器,并根据定义的规则将请求转发到适当的后端容器
nginx-net:自定义overlay网络,提供跨主机容器互联与跨主机通信。

3:每个服务中的任务(容器)均连接到ingress网络(提供负载与路由)与自定义overlay网络(跨节点通信)以及加入docker_gwbridge网络(容器与主机通信)

本篇的补充结束啦!0voice · GitHub

 

相关文章:

Docker网络和overlay的基础讲解

本人发现了两篇写的不错的文章:Docker网络 - docker network详解-CSDN博客,Docker 容器跨主机通信 overlay_docker overlay 网络-CSDN博客 因为这两篇文章中含有大量的例子,新手看起来毫不费力。于是我偷了个小懒,在本篇文章中没有…...

分布式数据库:深入探讨架构、挑战与未来趋势

引言 在数字化时代,数据已成为企业的核心资产。随着数据量的爆炸性增长和业务需求的多样化,传统的集中式数据库已难以满足现代应用对于高可用性、可扩展性和性能的需求。分布式数据库以其独特的优势,如数据的高可用性、容错性和可扩展性&…...

基于Springboot+Vue的仓库管理系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…...

基于立体连接与开源链动 2+1 模式的新商业路径探索

摘要:本文深入剖析了立体连接的内涵,包括其核心关键词、连接路径与主体,同时详细阐述了开源链动 2 1 模式、AI 智能名片和 S2B2C 商城小程序源码的特点与功能。在此基础上,深入研究这些要素的融合方式及其在商业实践中的应用&…...

开启鸿蒙开发之旅:核心组件及其各项属性介绍——布局容器组件

写在前面 组件的结构 rkTS通过装饰器 Component 和 Entry 装饰 struct 关键字声明的数据结构,构成一个自定义组件。 自定义组件中提供了一个 build 函数,开发者需在该函数内以链式调用的方式进行基本的 UI 描述 今天我们要学习的就是写在build 函数里的系…...

RabbitMQ 全面解析:语法与其他消息中间件的对比分析

1. 引言 在分布式系统和微服务架构中,消息中间件扮演着重要的角色。它们能够解耦服务、平衡负载、提高系统的可扩展性和可靠性。RabbitMQ 是其中广受欢迎的一种。本文将从 RabbitMQ 的基础概念、语法介绍、以及与其他消息中间件的对比角度,全面剖析其在…...

Three.js 搭建3D隧道监测

Three.js 搭建3D隧道监测 Three.js 基础元素场景scene相机carema网络模型Mesh光源light渲染器renderer控制器controls 实现3d隧道监测基础实现道路实现隧道实现多个摄像头点击模型进行属性操作实现点击模型发光效果 性能监视器stats引入使用 总结完整代码 我们将通过three.js技…...

「IDE」集成开发环境专栏目录大纲

✨博客主页何曾参静谧的博客📌文章专栏「IDE」集成开发环境📚全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定…...

MySQL-初识数据库

目录 一、数据库基础概念 1、SQL 2、数据(Data) 3、数据库(DB) 4、数据库管理系统DBMS 5、数据库系统DBS 6、关系模型(Relational Model) 7、E-R图 8、常见的数据库 9、数据库基本操作 一、数据库…...

初始 html

html 文件结构 html 标签是整个 html 文件的根标签(最顶层标签) head 标签中写页面的属性. body 标签中写的是页面上显示的内容 title 标签中写的是页面的标题 <html><head><title>这是一个标题</title></head><body></body> <…...

前端 call、bind、apply的实际使用

目录 一、call 1、继承的子类可以使用父类的方法 2、可以接收任意参数 二、call、apply、bind比较 1、案例一 2、案例二 三、总结 这个三个方法都是改变函数的this指向的方法。 一、call 代码&#xff1a; const obj{uname:"pink"}function fn(){console.log…...

非关系型数据库NoSQL的类型与优缺点对比

NoSQL数据库根据数据模型和应用场景主要分为四种类型&#xff1a;键值型、列族型、文档型和图形型。以下是对每种类型的详细描述&#xff0c;包括其应用场景、优缺点的比较&#xff1a; 1. 键值型数据库 (Key-Value Store) 典型代表 RedisMemcachedAmazon DynamoDB 应用场景…...

面试击穿mysql

Mysql三大范式: 第一范式&#xff08;1NF&#xff09;&#xff1a; 不符合第一范式的典型情况是在一个字段中存放多种不同类型的详细信息。例如&#xff0c;在商品表中&#xff0c;若将商品名称、价格和类型都存储在同一个字段中&#xff0c;会带来诸多弊端。首先&#xff0c;在…...

PyQt5超详细教程终篇

PyQt5超详细教程 前言 接&#xff1a; [【Python篇】PyQt5 超详细教程——由入门到精通&#xff08;序篇&#xff09;](【Python篇】PyQt5 超详细教程——由入门到精通&#xff08;序篇&#xff09;-CSDN博客) 建议把代码复制到pycahrm等IDE上面看实际效果&#xff0c;方便理…...

Android OpenGL ES详解——纹理:纹理过滤GL_NEAREST和GL_LINEAR的区别

目录 一、概念 1、纹理过滤 2、邻近过滤 3、线性过滤 二、邻近过滤和线性过滤的区别 三、源码下载 一、概念 1、纹理过滤 当纹理被应用到三维物体上时&#xff0c;随着物体表面的形状和相机视角的变化&#xff0c;会导致纹理在渲染过程中出现一些问题&#xff0c;如锯齿…...

Elasticsearch实战应用:从入门到精通

在当今这个数据爆炸的时代&#xff0c;如何快速、有效地从海量数据中检索信息&#xff0c;已经成为了许多企业和开发者面临的挑战。Elasticsearch&#xff0c;作为一个基于Lucene的搜索引擎&#xff0c;以其强大的全文搜索能力、分布式特性以及易用性&#xff0c;成为了解决这一…...

axios平替!用浏览器自带的fetch处理AJAX(兼容表单/JSON/文件上传)

fetch 是啥&#xff1f; fetch 函数是 JavaScript 中用于发送网络请求的内置 API&#xff0c;可以替代传统的 XMLHttpRequest。它可以发送 HTTP 请求&#xff08;如 GET、POST 等&#xff09;&#xff0c;并返回一个 Promise&#xff0c;从而简化异步操作 基本用法 /* 下面是…...

【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词

水果成篮 水果成篮 题目描述 因为只有两个篮子&#xff0c;每个篮子装的水果种类相同&#xff0c;如果从 0 开始摘&#xff0c;则只能摘 0 和 1 两个种类 &#xff1b; 因为当我们在两个果篮都装有水果的情况下&#xff0c;如果再走到下一颗果树&#xff0c;果树的水果种类…...

Go 数据库查询与结构体映射

下面是关于如何使用 Go 进行数据库查询并映射数据到结构体的教程&#xff0c;重点讲解 结构体字段导出 和 db 标签 的使用。 Go 数据库查询与结构体映射教程 在 Go 中&#xff0c;我们可以使用 database/sql 或 sqlx 等库与数据库进行交互。为了方便地将数据库查询结果映射到结…...

Wi-Fi背后的工作原理与技术发展历程介绍【无线通信小百科】

1个视频说清楚WIFI&#xff1a;频段/历程/技术参数/常用模块 智能手机拥有率越来越高的今天&#xff0c;大家已经习惯了通过无线网络上网的方式。除了在外面需要用手机流量&#xff0c;我们通常在家里或者机场&#xff0c;商场都可以通过Wi-Fi连接上网。本期文章将为大家介绍Wi…...

2024 年(第 7 届)“泰迪杯”数据分析技能赛B 题 特殊医学用途配方食品数据分析 完整代码 结果 可视化分享

一、背景特殊医学用途配方食品简称特医食品&#xff0c;是指为满足进食受限、消化吸收障碍、代谢素乱或者特定疾病状态人群对营养素或者膳食的特殊需要&#xff0c;专门加工配置而成的配方食品&#xff0c;包括0月龄至12月龄的特殊医学用途婴儿配方食品和适用于1岁以上的特殊医…...

STM32学习笔记------编程驱动蜂鸣器实现音乐播放

1. 硬件准备 STM32开发板&#xff1a;STM32F407系列蜂鸣器&#xff1a;常见的蜂鸣器分为两类&#xff1a;有源蜂鸣器和无源蜂鸣器。若使用有源蜂鸣器&#xff0c;只需提供电源和控制信号即可&#xff1b;若使用无源蜂鸣器&#xff0c;则需要控制频率。外接电源&#xff08;可选…...

ubuntu18.04 安装与卸载NCCL conda环境安装PaddlePaddle

cuda版本11.2 说明PaddlePaddle需要安装NCCL 1、Log in | NVIDIA Developer 登录官网 找到对应版本 官方提供了多种安装方式&#xff0c;本文使用Local installers (x86)本地安装 点击对应的版本下载如&#xff1a; nccl-local-repo-ubuntu1804-2.8.4-cuda11.2_1.0-1_amd6…...

AI有鼻子了,还能远程传输气味,图像生成香水

众所周知&#xff0c;图像、音乐能用AI生成&#xff0c;但出乎意料的是&#xff0c;气味也行。最近&#xff0c;一个名叫Osmo的初创公司宣布&#xff0c;他们成功地将气味数字化了。第一个成功的案例是“新鲜的夏季李子”&#xff0c;而且复现出的味道“闻起来”很不错。整个过…...

学习配置dify过程记录

最近在学习安装 Dify 并集成 Ollama 和 Xinference&#xff0c;学习过程中遇到很多问题&#xff0c;所以我都记录下来。 本人电脑环境&#xff1a;MacBook Pro 15.1系统 基本是基于B站教程一步步搭建: 【Dify快速入门 | 本地部署Dify基于Llama 3.1和OpenAI创建聊天机器人与知…...

简易抽奖器源码以及打包操作

import wx import random import time# 定义Myframe类,继承Frame class Myframe(wx.Frame):# 奖品rewards [桥本香奈, 二代CC, NaNa, 情深叉]# 构造方法def __init__(self):# 父类初始化super().__init__(None, title主界面, size(500, 400), pos(500, 200))# 创建面板&#x…...

一文了解什么是腾讯云开发

一文了解什么是腾讯云开发 关于云开发的猜想腾讯云开发腾讯云开发的优势无服务跨平台轻松托管节约成本 快速上手云开发环境快速搭建管理后台 云开发体验 关于云开发的猜想 说到云开发&#xff0c;作为开发者的大家是否大概就有了想法。比如说过去的开发工作都是在自己本地电脑…...

[CKS] K8S NetworkPolicy Set Up

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于不安全项目修复的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] K8S Ne…...

【JAVA】Java基础—面向对象编程:构造方法-实现一个Car类,包含多个构造方法,创建不同的汽车对象

在Java中&#xff0c;构造方法则是用于创建对象的特殊方法。通过构造方法&#xff0c;可以在创建对象时初始化其属性。构造方法的重载允许我们根据不同的需求定义多个构造方法&#xff0c;从而灵活地创建对象。 我们可以将汽车的构造方法比作汽车的配置选项。比如&#xff0c;…...

初识网络编程TCP/IP

目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程&#xff0c;会出现一堆协议、概念、这层次那技术的&#xff0c;头都大了&#xff0c;还是得总结总结…… 相关名词解释 ✨✨网络…...

wordpress中文主题 wp-cms/网页广告怎么投放

JDK安装 1、双击–next 更改安装路径 c、指定JRE安装目录 C:\Java\jre1.8.0_144&#xff0c;点击“下一步” 创建一个新文件放jre d、安装完成&#xff0c;点击“关闭” 3、JDK 环境变量配置 &#xff08;1&#xff09;新建–变量名&#xff1a;JAVA_HOME、变量值&#xf…...

一线全屋定制10大品牌/长沙seo优化首选

计算机二级是大学中必不可少的一个证下面小编悄悄告诉你们计算机二级考试中的15个技巧//1.修改Office默认打开方式//据本次参加了模拟考试的考生透露&#xff0c;在打开考生文件夹素材做题时候&#xff0c;可能会出现默认打开方式是wps的情况(有些考点有一级WPS科目)。解决办法…...

网站建设具体工作有什么/如何优化网络

原文地址&#xff1a; https://blog.csdn.net/mjzhang1993/article/details/70092902/ 最初接触 yarn 还是在 0.17.10 版本&#xff0c;由于各种各样的原因&#xff0c;使用时没 npm 顺手, 目前 yarn 的版本已经升级为 1.7.0 各种之前遇到的问题不复存在&#xff0c;安装、下载…...

jsp做的网站答辩问题/最新的全国疫情

一、使用与特性 1.1、使用说明&#xff1a; 一般来说&#xff0c;要使用某个类的方法&#xff0c;需要先实例化一个对象再调用方法。而使用staticmethod或classmethod&#xff0c;就可以不需要实例化&#xff0c;直接通过类名就可以实现调用。 使用&#xff1a;直接类名.方法…...

广州app网站建设/鸡西seo顾问

我曾经非常喜欢买衣服&#xff0c;遇到特别喜欢的款式&#xff0c;会把同款的两个颜色都买回家。衣服塞满了整个衣柜&#xff0c;由于屯得太多&#xff0c;很多衣服买回来还没穿过&#xff0c;就在角落里被遗忘了。我安慰自己&#xff0c;好看的衣服耐看容易搭配&#xff0c;迟…...

个人网站什么好/产品推广软文500字

个人以为只要设定了timeToLiveSeconds&#xff0c;中间过程不管有没有访问&#xff0c;只要LiveSeconds时间到了&#xff0c;缓存就会失效。但是开发时发现并非如此&#xff0c;经过一番折腾&#xff0c;最终发现自己的理解是正确的&#xff0c;还是使用层面的问题。 需求&…...