Docker中的网络

文章目录

  • 网络
    • 网桥(bridge)
    • 创建网桥接口
    • host
    • none
    • container
    • overlay
    • overlay底层原理

在这里插入图片描述

网络

在这里插入图片描述

网桥(bridge)

在Docker中,网桥(Bridge)是一种网络驱动,用于实现Docker容器之间和容器与宿主机之间的通信。Docker中的网桥工作原理可以简要概括如下:

  1. Docker0网桥

    • 当Docker引擎启动时,会自动创建一个名为docker0的虚拟网络接口,它是默认的Docker网桥。这个网桥的主要作用是连接所有Docker容器和宿主机的网络。
  2. 容器连接到网桥

    • 当用户启动一个新的Docker容器时,Docker会在docker0网桥上创建一个新的虚拟网络接口,并将容器连接到该网桥。每个容器都可以通过docker0网桥和其他容器以及宿主机进行通信。
  3. 容器之间的通信

    • 当多个容器连接到同一个docker0网桥时,它们可以直接相互通信。Docker通过使用Linux内核的veth设备对来自不同容器的数据流进行转发。这些数据流会通过docker0网桥进行桥接,从而实现容器之间的直接通信。
  4. 容器与宿主机的通信

    • 连接到docker0网桥的容器也可以与宿主机进行通信。Docker会在宿主机上创建一对虚拟网络接口:veth设备和veth-peer设备。这对虚拟网络接口的一个端口连接到docker0网桥,另一个端口连接到容器。这样,容器和宿主机可以通过这对虚拟网络接口进行通信。
  5. 端口映射

    • 为了使外部网络能够访问容器中运行的服务,Docker支持端口映射。通过端口映射,可以将容器内的服务端口映射到宿主机的端口上。这样,外部网络就可以通过宿主机的IP地址和映射的端口来访问容器中的服务。

总结来说,Docker中的网桥工作原理是通过创建虚拟网络接口并连接到docker0网桥来实现容器之间和容器与宿主机之间的通信。容器通过网桥实现相互通信,并通过端口映射使外部网络能够访问容器中的服务。这种网络配置使得Docker容器能够在同一个宿主机上创建独立的网络环境,并实现容器之间的隔离和互联。

宿主机的ip

[root@docker ~]# ip add
...
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:f3:a5:85:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:f3ff:fea5:8503/64 scope link valid_lft forever preferred_lft forever
29: veth774987e@if28: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 16:84:ce:26:90:d0 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::1484:ceff:fe26:90d0/64 scope link valid_lft forever preferred_lft forever
31: veth94d7539@if30: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 76:d6:a8:62:a7:32 brd ff:ff:ff:ff:ff:ff link-netnsid 1inet6 fe80::74d6:a8ff:fe62:a732/64 scope link valid_lft forever preferred_lft forever

容器ip

[root@docker ~]# docker exec box1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
28: eth0@if29: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
[root@docker ~]# docker exec box2 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
30: eth0@if31: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.3/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

查看bridge的信息

[root@docker ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242f3a58503	no		veth774987eveth94d7539
docker network inspect bridge

在这里插入图片描述

创建网桥接口

创建网桥

docker network create -d bride ydh

查看信息

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
555b043af3ec   bridge    bridge    local
ebf78f0dd27f   host      host      local
3b7c9e498144   none      null      local
baa150161000   ydh       bridge    local

在宿主机上查看

8: br-baa150161000: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:b0:17:de:a1 brd ff:ff:ff:ff:ff:ffinet 172.18.0.1/16 brd 172.18.255.255 scope global br-baa150161000valid_lft forever preferred_lft forever

查看详细信息

[root@localhost ~]# docker network inspect ydh
[{"Name": "ydh","Id": "baa15016100019f40011d2602d18a19a4fae7fedf73e0dbb32c5ffec229db0a2","Created": "2023-07-25T19:44:06.91098922+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]

创建运行容器指定网桥

[root@localhost ~]# docker run -d --name ynginx -p 8808:80 --network ydh nginx:latest 
2d605d921cac009de338dd45df255dfc0e9552aa264c8bfecd583dd78b723132

host

在Docker中,Host网络模式是一种网络配置选项,它允许Docker容器与宿主机共享同一个网络栈,即它们使用宿主机的网络命名空间和IP地址。这意味着容器与宿主机之间没有网络隔离,它们可以直接使用宿主机的网络接口进行通信,无需进行NAT(Network Address Translation)。

以下是Host网络模式的详细介绍:

  1. 网络共享: 在Host网络模式下,Docker容器和宿主机共享同一个网络栈,它们使用相同的网络接口和IP地址。这使得容器可以直接访问宿主机的网络接口,并且无需进行网络地址转换(NAT)或端口映射。

  2. IP地址和端口: 由于容器与宿主机共享网络栈,所以它们使用宿主机的IP地址和端口。在Host网络模式下,容器无需绑定或映射端口,因为它们直接使用宿主机的端口。

  3. 网络隔离: Host网络模式下的容器与宿主机之间没有网络隔离。这意味着容器可以访问宿主机上的所有网络服务,并且宿主机上的其他网络资源也可以直接访问容器。

  4. 性能: Host网络模式可以提高容器的网络性能,因为容器直接使用宿主机的网络接口,无需经过额外的网络地址转换。

  5. 适用场景: Host网络模式适用于一些特定的应用场景,例如:

    • 当容器需要与宿主机上的其他服务进行高性能的网络通信时。
    • 当容器需要绑定宿主机的特定网络接口,例如某个物理网卡。
    • 当容器需要访问宿主机上的网络服务,而不需要进行端口映射。
  6. 注意事项: 使用Host网络模式会导致容器与宿主机之间没有网络隔离,这可能会增加安全风险。容器与宿主机共享网络栈,所以容器的网络配置会影响到宿主机的网络配置,需要注意避免网络冲突和端口占用问题。

在这里插入图片描述

使用Host网络模式时,您需要明确了解容器与宿主机共享网络栈的特点,以及可能带来的安全风险和性能影响。Host网络模式适用于特定的使用场景,例如高性能网络通信或特定网络绑定需求。对于一般应用,通常建议使用桥接网络模式,以保持容器之间的网络隔离。

none

在Docker中,"none"网络模式是一种特殊的网络模式,容器在该模式下没有网络连接。这意味着容器内的进程无法与外部网络或其他容器通信。在"none"网络模式中,Docker容器不分配任何网络接口,也没有默认的网络配置。以下是"none"网络模式的详细介绍:

1. 没有网络接口: 在"none"网络模式下,Docker容器不会分配任何网络接口,这意味着容器内部没有网络可用。因此,容器内的进程无法访问外部网络,也无法通过网络与其他容器进行通信。

2. 与宿主机隔离: 在"none"网络模式下,容器与宿主机之间是隔离的,容器内的进程无法直接访问宿主机的网络接口和资源。这种隔离保护了宿主机的网络安全,确保容器内部的进程不能直接访问宿主机上的网络和服务。

3. 适用场景: "none"网络模式适用于一些特殊场景,例如在安全敏感的环境中运行容器时,您可能希望容器完全隔离网络,从而防止容器内的应用程序与外部网络进行通信。

4. 容器内部通信: 在"none"网络模式下,容器内部的进程仍然可以通过进程间通信(IPC)机制与其他容器或宿主机进行通信。IPC机制允许容器内的进程使用管道、共享内存等方式进行通信,而无需经过网络。

5. 自定义网络配置: 虽然容器在"none"网络模式下没有网络连接,但是您仍然可以手动配置容器内部的网络,例如通过添加虚拟网络接口或设置本地环回地址。这种情况下,您需要手动设置容器的网络配置,容器才能在"none"网络模式下进行一些局域网的通信。

总结来说,"none"网络模式在Docker中用于将容器完全隔离网络,容器内的进程无法与外部网络通信。这种模式适用于一些特殊场景,例如在需要完全隔离网络的安全环境下运行容器。然而,要注意在"none"网络模式下,容器内的进程之间仍然可以通过IPC机制进行通信,因此局域网内的一些进程间通信仍然是可行的。

container

在Docker中,网络容器(Network Container)是一种特殊的容器,它专门用于管理和提供网络功能,而不运行应用程序。网络容器不是运行应用程序的容器,而是通过Docker的网络驱动程序创建的专门用于网络隔离和连接的容器。以下是网络容器的详细介绍:

1. 网络功能提供: 网络容器的主要目的是提供网络功能,例如实现网络隔离、网络连接、路由和防火墙等。它们可以用于创建自定义网络环境,或者实现特定网络配置,以满足复杂的网络需求。

2. 不运行应用程序: 不同于普通的应用程序容器,网络容器不运行任何应用程序。它们的唯一任务是处理网络功能,并为其他应用程序容器提供网络连接。

3. 容器之间通信: 网络容器可以与其他应用程序容器或其他网络容器进行通信。它们可以在不同的网络环境中运行,提供不同的网络服务,但能够通过Docker的网络功能实现彼此之间的通信。

4. 自定义网络环境: 通过使用网络容器,您可以创建自定义的网络环境,实现更高级的网络配置。例如,您可以创建一个网络容器来实现虚拟私有网络(VPN)功能,将不同的应用程序容器连接到该VPN网络中,从而实现安全的网络通信。

5. 网络隔离: 网络容器通过Docker网络功能提供了网络隔离。这意味着网络容器与其他容器和宿主机之间具有独立的网络命名空间,它们之间的网络不会相互干扰。

6. 网络驱动程序: 网络容器使用Docker的网络驱动程序来实现网络功能。这些网络驱动程序可以是桥接网络、覆盖网络、Macvlan网络等,通过选择不同的网络驱动程序,您可以实现不同的网络配置。

7. 轻量级: 网络容器通常是轻量级的,因为它们不需要运行应用程序,只需专注于网络功能。这使得它们更高效,不会占用过多的系统资源。
在这里插入图片描述

总体来说,网络容器是一种专门用于管理和提供网络功能的容器。它们不运行应用程序,而是专注于网络隔离、连接和配置。通过使用网络容器,您可以实现复杂的网络环境和定制化的网络配置,从而满足不同的网络需求。

overlay

Docker中的Overlay网络是一种用于跨多个Docker主机创建共享虚拟网络的网络驱动程序。它是Docker Swarm集群的核心组件之一,允许容器在不同的主机上透明地通信,实现容器之间的透明网络连接。以下是Overlay网络的详细信息:

1. 跨主机通信: Overlay网络允许在Docker Swarm集群中的多个主机上创建一个共享的虚拟网络。这使得在不同主机上运行的容器可以直接通信,而无需进行额外的配置。

2. 网络隔离: 每个Overlay网络都有独立的命名空间,使得不同的Overlay网络之间具有网络隔离。这意味着在不同的Overlay网络中的容器无法直接通信,除非通过相应的网络配置。

3. 路由和覆盖: Overlay网络使用覆盖(Overlay)技术,通过在底层网络之上构建虚拟网络,实现容器之间的透明通信。每个容器都被分配一个虚拟IP地址,它们之间的通信通过Overlay网络驱动程序进行路由。

4. 透明性: 对于应用程序容器而言,Overlay网络是透明的,它们感知不到跨主机的网络连接。容器可以使用标准的网络配置(IP地址、端口等),就像在单个主机上运行一样。

5. 网络驱动程序: Overlay网络是Docker的一种网络驱动程序。要启用Overlay网络,您需要在Docker Swarm模式下创建一个Overlay网络,然后将需要在Overlay网络中通信的服务或容器加入到该网络中。

6. 安全性: Overlay网络使用加密和安全机制来保护跨主机的通信,确保数据在传输过程中是安全的。这为容器之间的安全通信提供了保障。

7. 负载均衡: Overlay网络集成了内置的负载均衡机制,可以自动在多个容器之间分配请求,实现负载均衡,提高应用程序的可用性和性能。

8. 多主机部署: Overlay网络特别适用于在多个Docker主机上部署应用程序。通过将容器分布在不同的主机上,Overlay网络可以实现高可用性和横向扩展。

总结来说,Overlay网络是一种在Docker Swarm集群中创建共享虚拟网络的网络驱动程序。它允许在不同主机上的容器透明地通信,实现容器之间的透明网络连接。通过Overlay网络,您可以在多主机环境中构建高可用性、横向扩展的应用程序。

overlay底层原理

Docker中的Overlay网络是一种非常强大的网络驱动程序,它允许在多个Docker主机上创建一个共享的虚拟网络。通过Overlay网络,您可以在不同的主机上运行容器,并使这些容器能够直接通信,而无需进行端口映射。下面是Overlay网络的底层原理的详细信息:

  1. VXLAN技术: Overlay网络的底层原理使用了VXLAN(Virtual Extensible LAN)技术。VXLAN是一种网络虚拟化技术,它通过在现有网络上创建逻辑隧道,将数据包封装在UDP数据包中,从而在不同网络之间传输数据。

  2. 虚拟网络隧道: 在Overlay网络中,每个Docker主机上的容器都属于一个虚拟网络,这些虚拟网络之间通过虚拟网络隧道进行通信。每个虚拟网络都有一个唯一的VXLAN网络标识(VNI,VXLAN Network Identifier),用于在底层区分不同的虚拟网络。

  3. VXLAN头: 在Overlay网络中,VXLAN头是在传输数据包时添加到原始数据包之前的一部分。VXLAN头包含了虚拟网络标识(VNI),用于识别数据包所属的虚拟网络。这样,当数据包在Overlay网络中传输时,Docker主机可以根据VNI将数据包正确地路由到目标虚拟网络。

  4. 网络广播: 在Overlay网络中,Docker主机使用广播机制来发现其他主机上的容器和虚拟网络。当新的容器加入或离开虚拟网络时,主机之间会进行广播通信,以更新虚拟网络中的拓扑结构。

  5. 数据包转发: 在Overlay网络中,Docker主机会根据VXLAN头中的VNI信息,将数据包转发到相应的虚拟网络。这样,即使容器位于不同的Docker主机上,它们也可以直接通信,就像它们在同一主机上一样。

  6. 控制平面和数据平面: Overlay网络通常由控制平面和数据平面组成。控制平面用于管理虚拟网络的拓扑结构和路由信息,而数据平面负责实际的数据包转发和通信。

在这里插入图片描述

总结来说,Overlay网络通过VXLAN技术创建虚拟网络隧道,使得分布在不同Docker主机上的容器能够直接通信。VXLAN头中的VNI标识用于将数据包正确路由到目标虚拟网络。Overlay网络的底层原理允许容器在不同主机之间建立透明的网络连接,从而实现高效的分布式应用部署。

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

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

相关文章

SpringBoot中接口幂等性实现方案-自定义注解+Redis+拦截器实现防止订单重复提交

场景 SpringBootRedis自定义注解实现接口防刷(限制不同接口单位时间内最大请求次数)&#xff1a; SpringBootRedis自定义注解实现接口防刷(限制不同接口单位时间内最大请求次数)_redis防刷_霸道流氓气质的博客-CSDN博客 以下接口幂等性的实现方式与上面博客类似&#xff0c;…

python pygbag教程 —— 在网页上运行pygame程序(全网中文教程首发)

pygame是一款流行的游戏制作模块&#xff0c;经过特殊的方式编译后&#xff0c;可以在浏览器web网页上运行。web上的打包主要使用第三方模块pygbag。 pygame教程&#xff1a;Python pygame(GUI编程)模块最完整教程&#xff08;1&#xff09;_pygame模块详解_Python-ZZY的博客-…

【配置环境】Windows下 VS Code 远程连接虚拟机Ubuntu

一&#xff0c;环境 Windows 11 家庭中文版VMware Workstation 16 Pro &#xff08;版本&#xff1a;16.1.2 build-17966106&#xff09;ubuntu-22.04.2-desktop-amd64 二&#xff0c;关键步骤 Windows下安装OpenSSHVS Code安装Remote - SSH插件 三&#xff0c;详细步骤 在Ubun…

React 前端应用中快速实践 OpenTelemetry 云原生可观测性(SigNoz/K8S)

OpenTelemetry 可用于跟踪 React 应用程序的性能问题和错误。您可以跟踪从前端 web 应用程序到下游服务的用户请求。OpenTelemetry 是云原生计算基金会(CNCF)下的一个开源项目&#xff0c;旨在标准化遥测数据的生成和收集。已成为下一代可观测平台的事实标准。 React(也称为 Re…

Kotlin 内联函数语法之let、apply、also、run、with的用法与详解

一、介绍 kotlin的语法千奇百怪&#xff0c;今天我们将介绍项目中频率使用比较高的几个内联函数。 二、什么叫内联函数&#xff1f; 内联函数 的语义很简单&#xff1a;把函数体复制粘贴到函数调用处 。使用起来也毫无困难&#xff0c;用 inline关键字修饰函数即可。 语法&a…

详解zookeeper安装使用

目录 1.概述 1.1.功能 1.2.特点 1.3.数据结构 2.安装 2.1.Windows 2.2.Linux 3.基础操作 3.1.增 3.2.删 3.3.改 3.4.查 3.5.监听 4.JAVA操作Zookeeper 4.1.依赖 4.2.客户端 4.3.增 4.4.删 4.5.查 4.6.改 1.概述 1.1.功能 zookeeper&#xff0c;Apache旗下…

pdf转换word软件哪个好?式?这款软件帮你轻松实现转换

在工作中&#xff0c;我们常常遇到这样的情况&#xff1a;我们的文件可能是PDF格式的&#xff0c;但对方要求我们以Word形式发送&#xff0c;因为Word相对于PDF占用更小的内存&#xff0c;打开更方便&#xff0c;发送时间更短。这时我们需要将PDF转换为Word格式&#xff0c;然而…

【跨代码仓库合并方案】

1、背景&#xff1a; 1、wiser绑定的uiidA的定制修改内容和ELKO绑定的uiidB基本是一样的&#xff0c;需要手动粘贴同步&#xff0c;增加测试保障风险&#xff0c;还会浪费开发资源投入&#xff1b; 2、施耐德wiser和elko面板两套面板基本一致&#xff0c;但是经过new art升级后…

机器学习深度学习——感知机

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——softmax回归的简洁实现 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们…

市面上的ipad国产触控笔怎么样?精选的性价比电容笔

要知道&#xff0c;真正的苹果品牌的那款原装电容笔&#xff0c;光是一支电容笔就价格近千元。实际上&#xff0c;平替电容笔对没有太多预算的用户是个不错的选择。一支苹果品牌的电容笔&#xff0c;价格是平替品牌的四倍&#xff0c;但电容笔的书写效果&#xff0c;却丝毫不逊…

科技云报道:是时候全员FinOps了吗?

科技云报道原创。 在论坛上&#xff0c;国外某企业的真实案例引发了热议。一开始该企业只顾技术创新&#xff0c;积极上云&#xff0c;不顾成本。 直到有一天&#xff0c;高层介入喊停&#xff1a;“这个云不能再上了&#xff0c;成本已经远大于收益了”。该企业因为成本失控…

java-day01

一&#xff1a;基础常识 软件&#xff1a;按照特定顺序的计算机数据与指令的集合。可分为系统软件&#xff08;如操作系统&#xff09;和应用软件&#xff08;如QQ&#xff09; 人机交互方式&#xff1a;图形化界面&#xff08;GUI&#xff09;与命令行&#xff08;CLI&#…

性能优化 - 前端性能监控和性能指标计算方式

性能优化 - 前端性能监控和性能指标计算方式 前言一. 性能指标介绍1.1 单一指标介绍1.2 指标计算① Redirect(重定向耗时)② AppCache(应用程序缓存的DNS解析)③ DNS(DNS解析耗时)④ TCP(TCP连接耗时)⑤ TTFB(请求响应耗时)⑥ Trans(内容传输耗时)⑦ DOM(DOM解析耗时) 1.3 FP(f…

代码随想录算法训练营第二天| 977

977. 有序数组的平方y 思路&#xff0c;原数组是有序的&#xff0c;但是因为负数平方后可能变无序了&#xff0c;因此利用双指针遍历原数组&#xff0c;比较 nums[left]*nums[left]和nums[right]*nums[right]谁更大&#xff0c;然后对新数组赋值 class Solution {public int…

MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示)

文章目录 GDI对象画笔和画刷来开发控件梯形边框的按钮控件CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp 矩形边框的三态按钮控件 CToolTipCtrl开发动静态提示CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp: 实现文件 矩形边框的三态按钮控件 CToolTipCtrl开发动…

欢乐暑假,华为儿童手表5系列为孩子位置安全保驾护航!

暑假带娃&#xff0c;就像爸妈的练兵场。幸好有 5 系列&#xff0c;离线定位、位置提醒、行为记录等安全守护功能面面俱到、样样精通&#xff0c;陪伴孩子度过悠长假期&#xff0c;也让爸妈长辈更安心更省力&#xff5e; 暑期到了&#xff0c;小朋友们都想出去玩&#xff0c;但…

修改密码和再次确认密码的js和element-ui的使用

<template><div><!-- plan的插槽 --><plan title"修改密码"><!-- 插槽的名字 --><span slot"header">修改密码</span><el-form:model"ruleForm2"status-icon:rules"rules2"ref"rul…

【数据结构】实验七:字符串

实验七 字符串实验报告 一、实验目的与要求 1&#xff09;巩固对串的理解&#xff1b; 2&#xff09;掌握串的基本操作实现&#xff1b; 3&#xff09;掌握 BF 和 KMP 算法思想。 二、实验内容 1. 给定一个字符串ababcabcdabcde和一个子串abcd,查找字串是否在主串中出现。…

【数据结构】实验一:绪论

实验一 绪论 一、实验目的与要求 1&#xff09;熟悉C/C语言&#xff08;或其他编程语言&#xff09;的集成开发环境&#xff1b; 2&#xff09;通过本实验加深对算法时间复杂度的理解&#xff1b; 3&#xff09;结合具体的问题分析算法时间复杂度。 二、实验内容 设计程…

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

目录 前言 Stream geospatial HyperLogLog Bitmaps Bitfields 前言 redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛&#xff0c;同时 redis 也推出了额外的 5 个数据类型&#xff0c;他们分别是针对特殊场景才进行的应用的. Ps&#xff1a;这几种…