一、知识点
【1】网络中的上行速率和下行速率
- 下行速率(Download):数据从网络流向自己的设备的速度
- 上行速率(Upload):数据从自己的设备流向网络的速度
- 平时大部分时间是在接受从网络流向自己的数据,所以家里带宽的下行速率通常远大于上行速率。
- “500M 宽带”,往往指下行 500Mbps,而上行可能只有 50Mbps左右。
【2】文件下载速度和硬盘读写速度、
文件下载速度要小于硬盘写入速度。
why?
下载文件:网络 → 内存(缓冲区)→ 硬盘
如果硬盘的读写速度跟不上文件的下载速度,就会导致下载的文件在内存缓冲区堆积,下载速度就会变慢。
【3】关系数据库和内存数据库
1、内存数据库是什么?
- 关系数据库就是把数据存放成二维表
- 内存数据库就是把数据存在内存(RAM)里,而不是磁盘上的数据库
内存数据库就是拿”快但易失”来换极致的读写速度。常见的有 Redis、Memcached 等。
2、为什么要有内存数据库?
比如一个网页要展示商品实时库存,如果每次都去硬盘里读数据,就会很慢。放在内存数据库里面,会快很多很多。
3、内存数据库怎么用?
连接 → 存 → 取
- 装一个内存数据库,比如Redis
- 连接 Redis
- 从 Redis 里面读数据,如果查不到,再从 MySQL 里面查,查完之后顺便写入 Redis。(有点类似于 cache)
【4】Windows 分屏终端
Alt + Shift + =:左右分屏(垂直拆分)
Alt + Shift + -:上下分屏(水平拆分)
Alt + 方向键:在分屏之间切换
exit 回车退出分屏
二、Redis 使用
真实场景案例:
登录验证码。
流程是:用户点”发送验证码” → 后端生成 6 位随机数 → 存进 Redis,5 分钟有效 → 用户提交后去 Redis 比对。
用它能把 Redis 的写入、读取、过期一次性全演示到。
下面以 Windows 为例:
第一步:安装并启动 Redis
Redis 官方不支持 Windows 原生,最省事的方式是 Docker
1 | # 拉取镜像并后台运行,把容器的 6379 端口映射到本机 |
运行完验证:
1 | docker ps |
第二步:连上 Redis
1 | # 进入容器里的命令行客户端 |
场景模拟:
1 | # 1. 模拟"发送验证码":存验证码,EX 300 表示 300 秒后自动过期 |
第三步:代码里真正调用(Python 示例)
先装客户端库:
1 | pip install redis |
然后写代码(存成 verify.py):
1 | import random |
执行:(或者直接在 PyCharm 中执行)
1 | python verify.py |
执行结果:
1 | 已向 13800001234 发送验证码:881748(5 分钟内有效) |
三、Docker 使用
【1】Docker 是什么?
Docker 是一个容器,可以把程序和它所需要的环境打包在一起。
Docker 的思路是:软件的发布者提前把整个软件 + 它依赖的一切(操作系统环境、运行库、配置文件)打包成一个标准包裹,叫镜像(Image)。你拿到这个包裹,Docker帮你开箱即用地跑起来,你不用关心它依赖什么,也不用装任何东西。
【2】为什么要用 Docker ?解决什么问题?
问题:
开发者的电脑上环境是 A,测试服务器环境是 B,线上服务器环境是 C。程序在 A 上跑得好好的,到 C 上就崩,因为缺个运行库、版本差半号、配置不一样……
解决方案:
Docker 让开发、测试、生产跑的是同一个镜像,环境完全一致,消灭”环境不一致”这个变量。
作用:
告别 “在我电脑上明明能跑”。
隔离。每个容器都是独立的小箱子,互相不干扰。
轻、快、省。Docker 容器很轻,启动是秒级的;虚拟机启动要好几分钟。
【3】Docker 能用来做什么?什么场景用?
1、跑数据库,不用在本机装。
学 Redis,在 Windows 或虚拟机里手动装、配、折腾,用一条命令 docker run redis 就可以完成,用完删除即可
2、部署网站和 Web 服务。
把写好的网站打包成容器,推到服务器上,一条命令就可以部署好,服务器崩溃换一台,拉下来再跑,只需要几秒
3、学习新软件、搭实验环境。
想试试新工具,开个容器,用完删掉,完全不污染自己的系统。
4、多服务一整套启动。
比如一个项目要 “网站 + 数据库 + 缓存” 三个东西,用 docker-compose 一条命令全给你拉起来。
【4】Docker 怎么用?
核心命令:
1 | docker run --name myredis -d -p 6379:6379 redis:7 |
- docker run:启动一个容器
- –name myredis:给这个容器起个名字,以后好管理
- -d:后台运行(detached),不然它会占住终端
- -p 6379:6379:端口映射,”宿主机端口:容器端口”。容器是个隔离的小环境,里面的 6379 外面访问不到,映射一下,访问本机 6379 就等于访问容器的 6379
- redis:7:镜像名:版本号。redis 是镜像,7 是标签(版本)。不写版本默认 latest
三个核心概念:
镜像(Image)
容器(Container):镜像跑起来的实例。一个镜像可以开出无数个容器。
Docker Hub:官方的镜像仓库网站(hub.docker.com)
Docker Compose:一个编排工具,用一个 YAML 文件定义”一组容器”(比如”项目 = Web 容器 + 数据库容器 + Redis 容器”),一条 docker compose up 全部拉起。
Daemon(守护进程):Docker 的幕后服务,Docker Desktop 启动时它就活了。
其他日常命令:
1 | docker ps # 看正在运行的容器 |
【5】Docker 真实场景案例
用 Docker 瞬间架起一个网站:
验证:
1 | docker version |
一条命令,建一个网站:
1 | docker run -d --name myweb -p 8080:80 nginx |
浏览器地址栏输入:
1 | http://localhost:8080 |
换成自己的网页:
目录新建一个 index.html
1 | <h1>欢迎来到我的第一个 Docker 世界</h1> |
然后执行:
1 | docker run -d --name myweb2 -p 8081:80 -v %cd%:/usr/share/nginx/html nginx |
访问:
1 | http://localhost:8081 |
1 | docker stop myweb myweb2 # 停止 |