开发环境服务器 vs 生产环境服务器:开发与生产须分明
【背景】作为开发者,我们在不同的阶段都与两种服务器环境打交道——开发环境服务器和生产环境服务器。虽然听起来名字相似,但它们的职责和工作方式简直是天差地别!
不知道朋友们有没有跟我一开始刚了解的时候的一些疑惑,因为刚开始我们并没有实际在生产环境中的部署经验,只是一直在开发环境下练习如何开发项目,所以可能就会有一种疑惑,为什么通过 npm run dev 或者 pnpm dev 跑起来的服务器,不能直接在部署环境下直接启动呢?我在开发环境下都用着好好的,直接在服务器(这里说的是服务器托管平台租的服务器)中启动不就完事了,为什么还要高处什么Nginx、Tomcat、Nodejs来启动后端服务呢,搞那么麻烦。
哈哈哈哈,我不知道真的是我想太多了,还是也有朋友们跟我有一样的困惑。接下来就让我们了解一下两者如何在开发过程中各显神通吧,我保证我说完,你就能恍然大悟了。
一、开发环境服务器
在现代前端开发的世界里,构建工具层出不穷,而 Vite 凭借其“快如闪电”的特性,迅速成为开发者们的宠儿,所以我们就以他为例来讲解了。
1. 开发环境服务器是什么?
开发环境服务器的核心目标是——让开发变得快速、方便和灵活。开发时,我们最需要的是效率,而非高超的性能。所以,开发环境服务器提供的服务更侧重于实时调试和快速反馈。你会发现,它就像一位无所不能的助手,时刻准备好帮助你迭代和修复代码。
2. 为什么Vite是如此惹人喜欢呢?
好像有点点偏题了,但是既然提到了他,就也介绍一下吧,不然不尊重它了。但是什么他是谁开发的,怎么开发的这些就不介绍了,主要讲一下他的功能。
在开发环境下,Vite 的开发服务器扮演了静态资源托管的角色。具体来说:
- 静态资源托管
- 当你在浏览器中访问 Vite 开发服务器(通常是 http://localhost:5173),它会响应你的请求,提供静态资源(如 HTML、CSS、JS 和图片)。
- Vite 使用现代浏览器支持的原生 ESModules 来加载 JavaScript,直接通过 HTTP 请求获取模块并动态解析依赖。
- 快速热更新(HMR):Vite 的开发服务器除了托管静态资源,还提供热更新功能(HMR)。当你修改代码时,Vite 会实时推送更新到浏览器,而不需要刷新整个页面。
3. 开发环境服务器的特点
-
代码托管: 开发环境服务器只是把你的HTML、CSS、JS文件提供给浏览器渲染。它不涉及复杂的性能优化,专注于让你快速看到结果。
-
极速响应: 只要你修改了一行代码,Vite就像闪电一样把修改结果呈现在浏览器里,不等待,不犹豫。
-
开发体验: 你可以专注于功能和界面,像在草稿纸上一样,不断修改,快速预览。
看到这里,我先是介绍了一下生成服务器的作用和功能,可能你会觉得,这些我都知道呀,网上到处都能看到的这些介绍。并不是卖关子哈,而是我还是想后面介绍完生成服务器之后一起来对比分析,他俩的差别
二、生产环境服务器:Nginx与Node.js,稳重且强大💪
1. 什么是生产环境服务器?
与开发环境的轻快与灵活不同,生产环境服务器肩负着重任——它不仅需要高效稳定,还得能应对大量的用户请求。生产环境的目标是提供稳定、可靠、且高性能的服务,确保在流量高峰时网站不会“瘫痪”。
我们接下来介绍两个常用的生产环境下的部署服务器
2. Nginx:高效的反向代理和静态资源托管专家
Nginx 是一位经验丰富的服务器大师,它不仅能处理静态资源,还能做负载均衡、反向代理、缓存等。它能让你的网站在真实环境中“高枕无忧”,不怕流量洪水冲击。
Nginx的几大必杀技:
-
反向代理: 通过将请求转发给后端服务器,Nginx可以减轻单一服务器的压力。
-
负载均衡: 当流量较大时,Nginx会自动将请求分配给多台服务器,避免服务器“超载”。
-
静态资源托管: 它能高效处理HTML、CSS、JS文件,确保页面加载速度极快。
-
缓存机制: Nginx可以缓存静态资源,提高请求的响应速度。
对于开发者来说,使用Nginx就像给你的应用加上了“护盾”,让它能够在面对高并发流量时依然稳如泰山。
server {listen 80;server_name example.com;location / {root /path/to/your/build/directory;try_files $uri $uri/ /index.html;}
}
3. Node.js:高效处理后端逻辑和API请求
Node.js作为后端技术,专注于处理API请求和业务逻辑。它以非阻塞I/O和事件驱动架构闻名,能够在高并发的情况下保证性能。
生产环境中的Node.js,通常用来处理前端发送的请求,进行数据处理、权限验证等。如果你希望你的应用能够快速响应用户的请求,Node.js无疑是一个强大的选择。
// 使用Express.js处理API请求
const express = require('express');
const app = express();
app.get('/api/products', (req, res) => {res.json({ products: [] }); // 返回产品列表
});
app.listen(3000, () => {console.log('API server running on port 3000');
});
4. 生产环境服务器的特点:
(1) 处理请求分发和静态资源托管
-
静态资源: 将 HTML、JS、CSS 等资源交给浏览器。
-
API 请求: 将 API 请求转发到后端逻辑处理器(如 Node.js)。
(2) 支持多种协议和优化
比如 Nginx 可以:
-
支持 HTTPS 协议,提升安全性。
-
启用缓存,减少服务器负载。
-
配置负载均衡,提高并发能力。
(3) 提高系统稳定性
生产环境中,前端和后端职责明确,有利于分开优化和维护。例如:
-
前端专注于用户体验(页面展示、动态交互)。
-
后端专注于业务逻辑(数据处理、权限校验)。
【生产服务器特点总结】
高可用性: 生产环境需要高可靠性,系统要能够稳定运行,不会宕机。
性能优化: 压缩、缓存、CDN等技术都可以帮助提升性能,确保用户在访问时获得快速的响应。
安全性: 使用HTTPS、权限控制、身份验证等手段保护数据安全,防止恶意攻击。
监控和日志: 在生产环境中,监控系统的运行情况并记录详细日志是必须的,便于问题的及时发现与修复。
三、开发环境与生产环境的区别:一张表清晰对比
我们先总体上来总结对比一下:
特性 | 开发环境(Vite) | 生产环境(Nginx、Node.js) |
---|---|---|
目标 | 快速开发与调试,提升开发效率 | 提供稳定、可靠的生产服务 |
性能优化 | 追求开发效率,性能非首要目标 | 高性能,支持大流量与高并发 |
安全性 | 安全性较低,主要用于调试 | 高安全性,启用HTTPS等防护 |
配置复杂度 | 简单、轻便,开箱即用 | 配置复杂,需要考虑负载均衡等 |
使用场景 | 本地开发调试,快速预览 | 用户访问,生产环境部署 |
四、回归话题:为什么 Vite 不能直接用作生产服务器?
相信大家看完上面的内容,应该也是大体上有一定的理解了,其实很简单。虽然 Vite 和 Nginx/Node.js 都叫“服务器”,但它们的职责和能力完全不同。
Vite 是一个轻量级的开发工具,它的“服务器”能力仅限于静态资源托管。
Nginx/Node.js 是面向生产环境的通用服务器,就是它们又可以托管静态资源,当客户端请求这个服务器下对应的端口时,也可以返回响应静态资源,又可以处理多种类型的请求、实现复杂的后端逻辑。
1. Vite 和后端服务器到底有何不同?
可以把 Vite 和 Nginx/Node.js 的分工比作一个城市的快餐店和中央厨房:
Vite 是快餐店
-
快速出餐(预览前端页面)。
-
提供简单的菜单(HTML、JS、CSS)。
-
不做复杂加工(不处理后端逻辑)。
Nginx/Node.js 是中央厨房
-
负责全城的配餐(处理 API 请求)。
-
储备丰富的原材料(数据库交互)。
-
考虑如何高效、卫生、安全地运作(高并发处理、负载均衡、权限校验)。
两者的职责完全不同。你可以在开发时用快餐店(Vite)解决问题,但到了正式营业(生产环境),必须依靠中央厨房。即利用开发服务器的热更新等特性,快速构建和开发项目,然后生产环境下需要考虑到安全性、后端处理逻辑和性能等,只有生产服务器才有这些能力。
现在大家应该完全理解为什么不能如我们所愿了吧,我们在开发学习或者练习过程后对开发环境服务器的配置和使用已经很熟悉了,为什么不能直接在生产环境下也直接来一个 npm run dev 开启一个服务器端口(比如 Vite 默认使用的 5173)呢?还要搞出一套 Node.js 和 Nginx 等另外一套操作。
【Vite:“哥,不是我不配合你的思维呀,是我的开发者没给我赋予这些职责和能力呀,我的工作只是提供静态资源和模块热更新,无法处理业务逻辑!😭”】
2. 工具链的分工让开发更高效
在现代前后端分离开发模式中,工具链的分工是优化开发和生产的关键:
-
开发阶段:使用 Vite 提供热更新和静态资源托管,让开发者快速调试和测试页面。
-
生产阶段:
-
使用 Nginx 托管静态资源,同时充当反向代理,将 API 请求转发到 Node.js。
-
使用 Node.js 处理后端业务逻辑,与数据库交互。
-
两者的分工明确,既提高了开发效率,也确保了生产环境的稳定和安全
至此,我们通过分析两种服务器的使用场景、功能支持与特点,解答了最初心里的小疑惑,其实就是各司其职嘛,还有就是,是 Vite 无法满足我们在生产环境下的需求,所以我们也不能将他用于生产环境。最后,希望这篇博客也能给各位朋友带来启发,欢迎一起交流和分享知识!
相关文章:
开发环境服务器 vs 生产环境服务器:开发与生产须分明
【背景】作为开发者,我们在不同的阶段都与两种服务器环境打交道——开发环境服务器和生产环境服务器。虽然听起来名字相似,但它们的职责和工作方式简直是天差地别! 不知道朋友们有没有跟我一开始刚了解的时候的一些疑惑,因为刚开始…...
Tomcat的安装即使用
Tomcat的概念 Tomcat服务器是Java语言开发的,免费的开放源代码的Web应用服务器。 Tomcat处理静态HTML的能力远不及Apache或者Nginx,通常是作为一个Servlet和JSP容器,单独运行在后端。 Tomcat是由三个功能组合而成: java servlet&…...
外包干了9天,技术退步明显。。。。。
时光荏苒,转眼我已是一个拥有近四年功能测试经验的大专生。19年,我满怀激情地通过校招进入湖南某知名软件公司,期待在这里开启我的职业生涯。然而,长时间的舒适环境让我渐渐失去了前进的动力,技术停滞不前,…...
梳理你的思路(从OOP到架构设计)_基本OOP知识04
目录 1、 主动型 vs.基於被动型 API 1)卡榫函数实现API 2)API的分类 3)回顾历史 4)API >控制力 2、 结语&复习: 接口与类 1)接口的表示 2)Java的接口表示 1、 主动型 vs.基於被动…...
每天40分玩转Django:简介和环境搭建
Django简介和环境搭建 一、课程概述 学习项目具体内容预计用时Django概念Django框架介绍、MVC/MTV模式、Django特点60分钟环境搭建Python安装、pip配置、Django安装、IDE选择45分钟创建项目项目结构、基本配置、运行测试75分钟实战练习创建个人博客项目框架60分钟 二、Djang…...
OpenCV相关函数
一、Sobel算子函数 (cv2.Sobel) 功能 Sobel算子是一个梯度算子,用于边缘检测。通过计算图像中像素的梯度,Sobel算子可以检测出水平和垂直方向上的边缘。 参数 src:输入图像。 ddepth:输出图像的深度(如cv2.CV_8U, cv…...
【理想汽车中科院】基于模仿学习的端到端自动驾驶数据缩放规律
论文: https://arxiv.org/pdf/2412.02689 项目: https://github.com/ucaszyp/Driving-Scaling-Law 0. 摘要 端到端自动驾驶范式因其可扩展性而最近吸引了大量关注。然而,现有方法受到现实世界数据规模有限的制约,这阻碍了对端到端自动驾驶相关扩展规律…...
重卡补能新未来:光储充换一体开启高效之路
《重卡补能新未来:光储充换一体开启高效之路》 一、光储充换一体重卡补能模式的兴起 重卡运输行业在电动化进程加速下迎来变革,光储超充快换一体化补能站成为新趋势。 随着国家 “双碳” 战略的持续推进,新能源汽车市场蓬勃发展,…...
Mybatis Plus 3.0 快速入门
1、简介 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 2、创建并初始化数据库 2.1、创建数据库 mybatis_plus 2.2、创建 User 表 其表结构如下: idnameageemail1Jone18test1@baomidou.com2Jack…...
ABAP:MB51字段增强
MB51所对应的程序:RM07DOCS 1.定义增强字段:RM07DOCS_GENERATED中定义 2.取值:RM07DOCS中detail_list中加取值逻辑 也有对ITAB取值做调整的,但是要写很多处,直接这里取值就很简单。 3.展示字段:RM07DOCS中…...
nVisual 定制化APP打包流程
一、下载打包软件 HBuilder X 下载地址:https://dcloud.io/hbuilderx.html 安装:此软件为绿色软件,解压即可使用。进入目录,双击exe启动。 此软件需要注册,打开时会提供跳转链接,通过邮箱注册账号。 注册成功后&#…...
k8s的节点亲和性NodeAffinity
关键词: ① requiredDuringSchedulingIgnoredDuringExecution:表示强匹配,必须要满足 ② preferredDuringSchedulingIgnoredDuringExecution:表示弱匹配,尽可能满足,但不保证 示例: apiVersion: v1 kind:…...
比特币国家与企业机构“战略储备”潮起
100 万枚 BTC 的战略储备资产,是一个什么概念? 据世界黄金协会统计数据显示,截至 2024 年第三季度,美联储黄金储备总量达 8133.46 吨(约合 5300 亿美元),稳居全球首位。而 100 万枚 BTC 当前市…...
Vue生命周期钩子函数:深入解析与实践
作为高级Vue前端开发人员,对Vue组件的生命周期钩子函数有着深刻的理解是至关重要的。生命周期钩子函数是指在Vue组件的创建、更新、销毁等过程中,Vue自动调用的一系列方法。通过这些钩子函数,我们可以在组件的不同生命周期阶段执行特定的操作…...
mysql、postgresql、oceanbase调优
一、mysql 1、my.cnf [mysqld_safe] log-error=/data/mysql/log/mysql.log pid-file=/data/mysql/run/mysqld.pid[client] socket=/data/mysql/run/mysql.sock default-character-set=utf8[mysqld] basedir=/usr/local/mysql tmpdir=/data/mysql/tmp datadir=/data/mysql/dat…...
【Flux.jl】 卷积神经网络
Flux.jl 是包含卷积神经网络的, 但是官方API文件中没有给出一个完整的程序框架, 只是对所需神经元给了局部解释, 此外对 model-zoo 模型动物园中的案例没有及时跟着 Flux.jl 的版本更新, 也无法运行出来结果。 因此本文搭建了一个完整可训练的卷积神经网络。 Conv 卷积算子…...
数字证书管理工具 openssl keytool
OPENSSL 命令 openssl command [ command_opts ] [ command_args ] 常用command: version 用于查看版本信息 enc 用于加解密 ciphers 列出加密套件 genrsa 用于生成私钥 -des|-des3|-idea:用来加密私钥文件的三种对称加密算法。 rsa …...
notify和notifyAll
notify和notifyAll 简单来说: notify():只唤醒一个等待的线程,如果有多个线程在等待,那么被唤醒的线程是随机选择的。 notifyAll():唤醒在该对象监视器上等待的所有线程,但是这些被唤醒的线程仍然需要竞争…...
删除MySQL的多余实例步骤
删除 MySQL 的多余实例通常意味着我们希望卸载或停止某个 MySQL 服务器实例,并从系统中完全移除它。这通常涉及到几个步骤,包括但不限于停止服务、删除数据目录、卸载软件(如果适用)等。 1.基于 Linux 的系统上删除 MySQL 的多余…...
LDR6500应用:C转DP线材双向投屏开启全新体验
在当今这个科技日新月异、蓬勃发展的时代,高清视频传输以及显示技术已经深深融入到我们日常生活与工作的方方面面,其重要性不言而喻。不管是在商务场合的会议演示,还是教育领域的娱乐享受,以及充满激情的游戏竞技领域,…...
商业化大前端在性能优化领域的探索与实践
导读:在业务飞速发展的过程中,用户体验是必不可少的一个环节,而页面性能是直接影响用户体验的重要因素。当页面加载时间过长、交互操作不流畅时,意味着业务可能会出现转化率降低、用户流失等业务问题。在过去一年,为了…...
FinClip | 2024年11月产品大事记
FinClip 的使命是使您(业务专家和开发人员)能够通过小程序解决关键业务流程挑战,并完成数字化转型的相关操作。不妨让我们看看在11月的产品与市场发布亮点,看看是否有助于您实现目标。 产品方面的相关动向👇…...
EasyPlayer.js在同一个http的mp4视频流地址,浏览器可以播放,播放器中却播放不了
流媒体技术正站在数字化时代的前沿,随着互联网技术的不断进步和市场需求的日益增长,其发展前景显得尤为广阔。随着全球数字化转型的不断深入,流媒体行业将迎来更加繁荣的未来,成为信息传播和娱乐消费的主要渠道。 用户遇到在同一个…...
探索云原生安全解决方案的未来
我们是否充分意识到云端所面临的网络安全威胁? 在当今互联互通的世界中,维护安全的环境至关重要。云的出现扩大了潜在威胁的范围,因为它催生了机器身份(称为非人类身份 (NHI))及其秘密。随着组织越来越多地转向云原生…...
发愿和许愿的区别是什么?
在许多宗教和文化中,发愿和许愿都是人们表达内心愿望、祈求神灵保佑的重要方式。尽管这两个词在日常生活中经常被交替使用,但它们在含义和实践上存在一些重要的区别。本文就来详细说说发愿和许愿的区别,并提供相关的背景信息和建议。 1. 定义…...
【IntelliJ IDEA 集成工具】TalkX - AI编程助手
前言 在数字化时代,技术的迅猛发展给软件开发者带来了更多的挑战和机遇。为了提高技术开发群体在繁多项目中的编码效率和质量,他们需要一个强大而专业的工具来辅助开发过程,而正是为了满足这一需求,TalkX 应运而生。 一、概述 1…...
【故障处理--修改CI流水线】
背景:研发同事反映CI流水线卡顿严重,判断是移动云镜像仓库的带宽太小,故在公有云搭建一个harbor仓库,这就意味着CI流水线有些配置需要改动 1、CI流水线的介绍 helm-chart/pcas-appstore-hy存放的是chart包需要的文件 Dockerfile…...
Android 使用 Gson + OkHttp 实现 API 的常规使用(个人心得)
学习笔记 一、依赖和权限的添加 网络权限: 在 Android 中进行网络请求时,必须声明权限,确保应用具有访问互联网的能力。 <uses-permission android:name="android.permission.INTERNET"/> 依赖项: 确保在 build.gradle 中添加以下依赖: dependencies …...
MR30分布式 IO 模块:硅晶行业电池片导片机的智能 “心脏”
硅晶产业作为全球能源和电子领域的基石,其生产规模庞大且工艺复杂。从硅料的提纯、拉晶,到硅片的切割、电池片的制造,每一个环节都要求高精度与高稳定性。在电池片生产环节,导片机承担着硅片传输与定位的重要任务,其运…...
mysql高级篇 | 尚硅谷 | 第2章_数据库和文件系统的关系
二、数据库和文件系统的关系 文章目录 二、数据库和文件系统的关系1、查看默认数据库2、 数据库在文件系统中的表示3、表在文件系统中的表示①InnoDB存储引擎模式②表中数据和索引②MyISAM存储引擎模式 4、小结 1、查看默认数据库 查看一下在我的计算机上当前有哪些数据库&…...
React 生命周期
React 生命周期可以分为三个主要阶段:挂载(Mounting)、更新(Updating)和卸载(Unmounting) 挂载(Mounting) 当组件实例被创建并插入到 DOM 中时,会依次调用以…...
OpenCV--图像查找
OpenCV--图像查找 代码和笔记 代码和笔记 import cv2 import numpy as np""" 图像查找--特征匹配的应用,通过特征匹配和单应性矩阵 单应性变换:描述物体在世界坐标系(原图)和像素坐标系(对比图&#x…...
数据保护策略:如何保障重要信息的安全
一、什么是数据安全? 数据安全是保护数字信息免遭盗窃、未经授权的访问和恶意修改的过程。这是一个持续的过程,负责监督信息的收集、存储和传输。 机密性:保护数据免遭未授权方访问。 完整性:保护数据免遭未经授权的修改、损坏…...
AI生成图表化:深入探索Mermaid
引言 在使用生成式AI时,只要你提出让AI帮你生成mermaid图,AI的生成就会出现丰富的图形! 在现代文档编写中,图表的使用不仅能增强文档的可读性,还能更直观地表达复杂的概念和流程。Mermaid 作为一款开源的图表绘制工具…...
模型训练中梯度累积步数(gradient_accumulation_steps)的作用
模型训练中梯度累积步数(gradient_accumulation_steps)的作用 flyfish 在使用训练大模型时,TrainingArguments有一个参数梯度累积步数(gradient_accumulation_steps) from transformers import TrainingArguments梯…...
jenkins安装(jdk1.8已安装)
1. 下载对应jenkins版本 https://mirrors.jenkins.io/war/ 2. 上传至服务器目录并启动 mkdir -p /root/jenkins cd /root/jenkins 上传文件 启动:nohup java -jar jenkins.war --httpPort9090 &> jenkins.log & 访问:http://ip:9090 选…...
爬虫实战:获取1688接口数据全攻略
引言 在电商领域,数据的重要性不言而喻。1688作为中国领先的B2B电商平台,提供了海量的商品数据。通过爬虫技术获取这些数据,可以帮助企业进行市场分析、价格监控和供应链管理。本文将详细介绍如何使用Python爬虫技术合法合规地获取1688接口数…...
基于Mybatis,MybatisPlus实现数据库查询分页功能
基于Mybatis,MybatisPlus实现数据库查询分页功能 目录 基于Mybatis,MybatisPlus实现数据库查询分页功能使用Mybatis插件实现分页数据库准备分页插件配置和使用常用数据: 使用MybatisPlus插件实现分页数据库准备分页插件配置和使用自定义分页查…...
【C++】求第二大的数详细解析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述💯输入描述💯解题思路分析1. 题目核心要求2. 代码实现与解析3. 核心逻辑逐步解析定义并初始化变量遍历并处理输入数据更新最大值与次大值输…...
Ubuntu18安装后基本配置操作
1. 关掉自动更新 不关掉自动更新,会将你的ubuntu系统更新到更高版本,一些配置就不能用了,所以要关掉自动更新。在“软件和更新”中将“自动检查更新”设置为从不。 2. ubuntu换国内源 参考链接换源 按照这个换源这个换源好使 ,…...
【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 前言 随着无服务计算的兴起和大数据环境中的数据集成需求, 需要使用某些轻量级的服务,来实现一些简单操作。因此Azure Function就成了微软云上的一个必不可少的组成部分。 …...
【ubuntu】将Chroma配置为LINUX服务
Chroma是一个轻量级向量数据库。既然是数据库,那么我希望它是能够长时间运行。最直接的方式是配置为service服务。 可惜官方没有去提供配置为服务的办法,而鄙人对docker又不是特别感冒。所以自己研究了下chroma配置为服务的方式。 系统:ubu…...
Linux24.04 安装企业微信
今天工作需要把windows系统换成了linux,但是公司的沟通工具是企业微信。去企业微信官网看了,没有linux版本,只能想办法解决了,不然再换回去就太坑了。 方案 1、使用docker容器,2、使用deepin-wine 本人对docker不太熟…...
路由引入问题(双点双向路由回馈问题)
简介 总所周知,路由引入import又称路由重分发redistribute,为了解决不同路由协议进程间路由信息不互通而使用的技术,由于不同路由协议的算法、机制、开销等因素的差异,它们之间无法直接交换路由信息。因此,路由引入技…...
Redis 实现分布式锁
单实例条件下的分布式锁 -- 加锁操作 -- KEYS[1]: 锁的键(lock_key) -- ARGV[1]: 当前客户端的标识(client_id) -- ARGV[2]: 锁的过期时间(毫秒)if (redis.call(EXISTS, KEYS[1]) 0) then-- 如果锁不存在…...
Redis客户端(Jedis、RedisTemplate、Redisson)
1. 简介 Redis作为一个当下很火热的非关系型数据库,Java从业人员基本都离不开对Redis的使用。在Java程序中该数据库,需要借助于市面上的开源客户端,如Jedis、Spring Data Redis、Redisson,它们可以作为操作Redis非关系型数据库的桥…...
虚幻引擎内各个组件的关系
1. GameMode: 关系: GameMode 是游戏规则的制定者和管理者,GameState 则是游戏状态的记录者和同步者。GameMode 通常负责创建和初始化 GameState。 交互: GameMode 可以直接访问和修改 GameState 的属性,例如更新游戏分数、切换游戏阶段等。GameState 的变化会通过 GameMode …...
Python Flask Web框架快速入门
Flask 入门Demo Flask 开发环境搭建,执行如下指令: pip install flask# 第一节: Flask 快速入门from flask import Flask app Flask(__name__)app.route(/flask) def hello_flask():return Hello Flaskapp.run()核心代码剖析: 从flask包导…...
【java学习笔记】Set接口实现类-LinkedHashSet
一、LinkedHashSet的全面说明 (就是把数组不同位置的链表当成一个节点然后相连)...
阿里云ACP云计算模拟试题(附答案解析)
1、将基础设施作为服务的云计算服务类型是_____服务。 A.laas B.Paas C.SaaS D.Daas 答案:A 解析:基础设施即服务有时缩写为 IaaS,包含云 IT 的基本构建块,通常提供对联网功能、计算机(虚拟或专用硬件&#x…...