Next.js授权管理教程:深入掌握Session管理
更多有关Next.js教程,请查阅:
【目录】Next.js 独立开发系列教程-CSDN博客
目录
引言
1. Session管理的基本概念
1.1 什么是Session管理?
1.2 Session与Cookie
1.3 使用Session的优点
2. 在Next.js中管理Session
安装依赖
设置Session Cookie
2.2 读取Session信息
2.3 会话过期与销毁
设置会话过期时间
销毁Session
3. 高级Session管理功能
3.1 使用JWT作为Session标识
安装JWT库
设置JWT
验证JWT
4. 总结
引言
在构建现代Web应用时,管理用户会话(Session)是一个至关重要的环节。用户会话不仅涉及到用户的身份认证,还影响到用户体验的流畅性和安全性。在Next.js中,我们可以借助API路由、服务器端渲染(SSR)等特性灵活管理会话,从而实现高效的用户登录、身份验证、以及会话维护等功能。
本文将全面讲解如何在Next.js应用中实现Session管理,涉及到如何创建、存储和验证会话数据,如何有效地使用cookie
、JWT
等技术来管理会话,最后如何实现会话的过期和销毁等操作。
1. Session管理的基本概念
1.1 什么是Session管理?
Session管理是指在用户与Web服务器的多次交互中,如何保存和识别用户的状态和身份。具体来说,它包括以下几个方面:
- 身份验证:确认用户的身份信息,通常是通过用户名和密码。
- 会话存储:在服务端或客户端存储会话信息,通常会存储一些标识用户的标记(如
sessionId
)。 - 状态维持:在多个请求之间维持用户的登录状态,避免用户每次访问都需要重新登录。
- 会话过期:确保会话在某些条件下失效,比如用户长时间未操作或者主动退出。
1.2 Session与Cookie
Session通常与浏览器的Cookie结合使用。Cookie是客户端的一种小型存储机制,允许服务器在浏览器上存储一些信息。为了实现会话管理,服务器会将会话ID(如sessionId
)存储在Cookie中,然后在后续的请求中,浏览器会自动将该Cookie随请求发送,服务器通过该会话ID来识别和管理用户的状态。
1.3 使用Session的优点
- 无状态请求:用户不需要在每个请求中都提供认证信息,减少了带宽和计算资源的浪费。
- 简化登录过程:在登录后,用户可以在一段时间内不必重复登录,提高了用户体验。
- 增强的安全性:通过合理的Session管理,可以防止CSRF攻击、会话固定攻击等安全漏洞。
2. 在Next.js中管理Session
2.1 使用cookie
存储Session
在Next.js中管理会话,最常用的方式是通过cookie
来存储Session信息。cookie
允许我们在客户端存储用户的Session标识符(例如sessionId
),每次请求时,浏览器会将这些信息自动附加在请求头中,服务器端可以通过这些信息识别用户。
安装依赖
要在Next.js中处理Cookie,推荐使用nookies
库来简化Cookie的读写操作:
npm install nookies
设置Session Cookie
我们可以在Next.js的API路由中设置Session Cookie。例如,当用户登录成功时,我们可以通过nookies
设置一个包含sessionId
的cookie。
// pages/api/login.js
import { setCookie } from 'nookies';export default function handler(req, res) {if (req.method === 'POST') {const { username, password } = req.body;// 模拟身份验证if (username === 'user' && password === 'password') {// 登录成功,设置Sessionconst sessionId = 'randomSessionId'; // 真实应用中应该生成唯一的Session IDsetCookie({ res }, 'sessionId', sessionId, {maxAge: 30 * 24 * 60 * 60, // 设置过期时间为30天path: '/',});res.status(200).json({ message: 'Login successful' });} else {res.status(401).json({ message: 'Invalid credentials' });}} else {res.status(405).json({ message: 'Method Not Allowed' });}
}
在上面的代码中,当用户提供正确的凭据时,我们通过nookies
将sessionId
存储在cookie
中,并设置了过期时间和作用域(path
)。这样,浏览器将在后续的请求中自动将该sessionId
发送到服务器。
2.2 读取Session信息
在Next.js中,我们可以使用getServerSideProps
或者API路由中的context
来读取会话信息。以下是如何在服务器端获取存储在Cookie中的Session信息:
// pages/dashboard.js
import { parseCookies } from 'nookies';export async function getServerSideProps(context) {const cookies = parseCookies(context);const sessionId = cookies.sessionId;if (!sessionId) {return {redirect: {destination: '/login',permanent: false,},};}// 模拟通过sessionId查找用户const user = { name: 'John Doe', role: 'admin' }; // 通过sessionId获取用户信息return {props: { user },};
}const Dashboard = ({ user }) => {return (<div><h1>Welcome, {user.name}</h1><p>Your role: {user.role}</p></div>);
};export default Dashboard;
在这个例子中,getServerSideProps
读取Cookie中的sessionId
并根据该ID判断用户是否已登录。如果未找到sessionId
,则重定向到登录页面。
2.3 会话过期与销毁
一个好的Session管理不仅仅是保存Session,还需要处理会话的过期和销毁。在实际应用中,我们通常会为会话设置过期时间,超过该时间后,Session会自动失效。
设置会话过期时间
如前所述,我们可以通过cookie
设置Session的过期时间。maxAge
属性定义了Session的有效期:
setCookie({ res }, 'sessionId', sessionId, {maxAge: 60 * 60 * 24, // 1小时path: '/',
});
销毁Session
当用户登出时,我们需要清除Session信息。可以通过destroyCookie
方法来删除存储在cookie
中的sessionId
。
// pages/api/logout.js
import { destroyCookie } from 'nookies';export default function handler(req, res) {if (req.method === 'POST') {// 删除存储在cookie中的sessionIddestroyCookie({ res }, 'sessionId', { path: '/' });res.status(200).json({ message: 'Logout successful' });} else {res.status(405).json({ message: 'Method Not Allowed' });}
}
在这个例子中,当用户登出时,我们调用destroyCookie
来删除sessionId
,使用户的Session失效。
3. 高级Session管理功能
3.1 使用JWT作为Session标识
在Next.js中,除了使用传统的Session ID,我们还可以使用JWT(JSON Web Token)作为Session标识。JWT是一种自包含的令牌,它存储了用户的信息,并且可以被验证和解码。
安装JWT库
首先,我们需要安装一个JWT库,例如jsonwebtoken
:
npm install jsonwebtoken
设置JWT
登录时,我们可以生成一个JWT并将其发送给客户端,客户端将JWT存储在cookie
中。每次请求时,服务器端可以解码JWT并验证用户的身份。
// pages/api/login.js
import { setCookie } from 'nookies';
import jwt from 'jsonwebtoken';export default function handler(req, res) {if (req.method === 'POST') {const { username, password } = req.body;// 模拟身份验证if (username === 'user' && password === 'password') {// 创建JWTconst token = jwt.sign({ username, role: 'admin' }, 'your-secret-key', { expiresIn: '30d' });// 将JWT存储在Cookie中setCookie({ res }, 'token', token, {maxAge: 30 * 24 * 60 * 60, // 设置过期时间为30天path: '/',});res.status(200).json({ message: 'Login successful' });} else {res.status(401).json({ message: 'Invalid credentials' });}} else {res.status(405).json({ message: 'Method Not Allowed' });}
}
验证JWT
在服务器端,我们可以通过jsonwebtoken
来验证JWT的有效性:
import jwt from 'jsonwebtoken';export async function getServerSideProps(context) {const cookies = parseCookies(context);const token = cookies.token;if (!token) {return {redirect: {destination: '/login',permanent: false,},};}try {const decoded = jwt.verify(token, 'your-secret-key');return {props: { user: decoded },};} catch (error) {return {redirect: {destination: '/login',permanent: false,},};}
}
4. 总结
在本文中,我们深入探讨了如何在Next.js中实现会话管理,涵盖了如何使用cookie
存储和验证Session、如何设置会话过期、如何通过JWT管理会话以及如何处理会话的销毁等关键概念。通过这些技术,您可以在Next.js应用中实现一个安全、可靠且高效的会话管理系统。
通过合理配置Session管理,您可以为用户提供更好的使用体验,并确保应用的安全性,避免一些常见的安全问题,如会话固定攻击、跨站请求伪造(CSRF)等。
随着Web应用的复杂性增加,您可能还需要更进一步的会话管理策略,但本教程已为您奠定了坚实的基础。
更多有关Next.js教程,请查阅:
【目录】Next.js 独立开发系列教程-CSDN博客
相关文章:
Next.js授权管理教程:深入掌握Session管理
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 引言 1. Session管理的基本概念 1.1 什么是Session管理? 1.2 Session与Cookie 1.3 使用Session的优点 2. 在Next.js中管理Session 2.1 使用cookie存储Se…...
Python+OpenCV系列:滤波器的魔力
滤波器是图像处理领域中不可或缺的工具。无论是去除噪声、锐化图像还是提取特征,滤波器都扮演着重要角色。本篇将从简单到复杂,带你快速掌握 PythonOpenCV 中的滤波器使用技巧。 什么是滤波器? 滤波器是一种对图像像素值进行计算、平滑或增强…...
代码随想录算法训练营day41|动态规划买卖股票问题
今天的三题买卖股票问题,实际上解题方法都大同小异,思路也和昨天的树形dp有相似之处,都是用一个dp数组的不同下标来记录不同的状态。其中第一题是只买卖一次,可以用贪心的方法,找出左边的最小值和右边的最大值…...
【EthIf目录】EthIf的文件结构
ls -R 查看目录EthIf的文件结构,包含四个目录, 一个make file文件,具体如下所示:...
Spring 面试题整理
文章目录 一、控制反转 IoC什么是 Bean 和 Spring Bean?依赖注入的常见方式?Bean 的作用域有哪些?protype bean 里面的依赖是 singleton bean 的话,IoC 容器会怎么处理?Bean 的生命周期?Resource 和 Autowi…...
Converting circular structure to JSON
最近在项目中遇到了这个问题,头疼,弄了一下午才解决。做一个笔记吧。 1 Converting circular structure to JSON 我这个问题大致就是在使用pinia中出现了循环引用,意思是两个或多个模块、对象或依赖之间形成了相互依赖的链条。在使用 Pinia…...
webstorm开发uniapp(从安装到项目运行)
1、下载uniapp插件 下载连接:Uniapp Tool - IntelliJ IDEs Plugin | Marketplace (结合自己的webstorm版本下载,不然解析不了) 将下载到的zip文件防在webstorm安装路径下,本文的地址为: 2、安装uniapp插…...
企业级包管理器之搭建 npm 私有服务器 (6)
在企业级应用开发中,常常需要处理私有包的发布和管理。搭建 npm 私有服务器是一个理想的解决方案,它不仅能保证代码的私密性,还能提供更快的下载速度和更精细的权限设置。 一、搭建 npm 私有服务器的优势 保证代码私密性:在企业…...
会议通知:人工智能通识教育与实践发展暨和鲸科技AI通识课解决方案发布会
今年秋季学期起,全国多所高校面向本科生开设人工智能通识课。 当前人工智能通识课程的建设进展主要分为三种情况: 全市统筹,由某头部高校牵头建设市级人工智能通识课,以北京市、天津市为代表; 已于秋季学期按照课程…...
windows C#-自动实现属性的轻型类
此示例演示如何创建一个不可变的轻型类,该类仅用于封装一组自动实现的属性。 当你必须使用引用类型语义时,请使用此种构造而不是结构。 可通过以下方法来实现不可变的属性: 仅声明 get 访问器,使属性除了能在该类型的构造函数中…...
汽车零部件设计之——发动机曲轴预应力模态分析仿真APP
汽车零部件是汽车工业的基石,是构成车辆的基础元素。一辆汽车通常由上万件零部件组成,包括发动机系统、传动系统、制动系统、电子控制系统等,它们共同确保了汽车的安全、可靠性及高效运行。在汽车产业快速发展的今天,汽车零部件需…...
C#基础:结构
目录 1. C# 程序结构 示例: 2. 变量和数据类型 示例: 3. 控制结构 条件语句(if): 循环语句(for 和 while): 4. 函数定义和调用 示例: 5. 数组和集合 数组示例…...
[免费]SpringBoot+Vue疫苗接种预约管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue疫苗接种预约管理系统,分享下哈。 项目介绍 如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在…...
C++50道经典面试题
文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 导读 作为一种通用且面向对…...
iptables详解
华子目录 什么是防火墙分类netfilter(数据包过滤)定义netfilter分析内容 防火墙无法完成的任务netfilter策略管理工具netfilter的5类hook函数防火墙规则策略匹配原则iptablesiptables流量处理动作iptables表5种规则表 安装iptablesiptables策略文件 ipta…...
静态链表的构建
前言: 静态链表的概述: 静态链表是一种在数组中模拟链表结构的数据结构,它通过数组的索引来模拟指针,实现节点之间的链接,就不需要使用指针了。每个节点由两部分组成:数据域和游标。数据域用于储存数据&a…...
python3中的身份运算符
一. 简介 本文简单学习一下,python3中的身份运算符。 在Python 3中,身份运算符用于比较两个对象的身份,即它们是否引用内存中的同一个对象。 二. python3 中的身份运算符 1. python3 中的身份运算符 python3 中的身份运算符如下表所示&a…...
Java泛型设计详解
引言 在日常Java开发中,泛型是一个非常重要的特性。它提供了编译时的类型安全检查,增强了代码的可读性和可维护性。然而,对于初学者甚至一些有经验的开发者来说,泛型的使用和理解仍然是一个挑战。本文旨在深入探讨Java泛型的诞生…...
第十九章程序清单合集——Java语言程序设计进阶篇(黑皮书)
目录 程序清单19_1GenericStack 程序清单19_2GenericMethodDemo 程序清单19_3BoundedTypeDemo 程序清单19_4GenericSort 程序清单19_5Max 程序清单19_6MaxUsingGenericType 程序清单19_7wildCardNeedDemo 程序清单19_8AnyWildCardDemo 程序清单19_9SuperWildChardDem…...
el-table组件树形数据修改展开箭头
<style lang"scss" scoped> ::v-deep .el-table__expand-icon .el-icon-arrow-right:before {content: ">"; // 箭头样式font-size: 16px; }::v-deep .el-table__expand-icon{ // 没有展开的状态background-color: rgba(241, 242, 245, 1);color:…...
LabVIEW前面板无法显示的常见原因
当 LabVIEW 前面板显示为白色或黑色时,可能由于控件可视性设置、显卡驱动问题、程序错误或 LabVIEW 设置不当引起。通过检查面板设置、更新驱动、重启程序等方式可有效解决此问题。 遇到前面板无法显示或显示为白色/黑色的情况,可能有以下几种原因。可以…...
PyQt事件机制练习
一、思维导图 二、代码 import sysfrom PyQt6.QtTextToSpeech import QTextToSpeech from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit from PyQt6 import uic from PyQt6.QtCore import Qt, QTimerEvent, QTimeclass MyWidget(QWidget):d…...
Android 中,Activity Fragment:如何进行界面跳转、数据传递等
学习笔记 1. Activity 之间的界面跳转和数据传递 在 Android 中,Activity 之间的跳转通常通过 Intent 来完成。Intent 可以携带数据,并传递给目标 Activity,也可以从目标 Activity 返回数据。 从一个 Activity 跳转到另一个 Activity // 在…...
【ubuntu18.04】安装easycwmp出现/usr/bin/ld: cannot find -lubus问题解决方案
错误日志 rootw1804-virtual-machine:/opt/dev/easycwmp# make Making all in bin make[1]: Entering directory /opt/dev/easycwmp/bin gcc -DPACKAGE_NAME\"easycwmpd\" -DPACKAGE_TARNAME\"easycwmpd\" -DPACKAGE_VERSION\"1.8.6\" -DPACKAG…...
可视化建模以及UML期末复习----做题篇
一、单项选择题。(20小题,每小题2分,共40分) 1、UML图不包括( ) A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案:C、流程图 UML中不包括传统意义上的流程图,流程图通常是指B…...
【2024年浙江工商大学程序设计竞赛新生赛(同步赛)部分题解】
比赛链接 C. 交换 题目大意 给定一个长度为 n n n 的数组 a a a。一开始你有一个总和 s 0 s 0 s0。 现在你需要做 n n n 次操作,第 i i i 次操作的流程如下( 1 ⩽ i ⩽ n 1 \leqslant i \leqslant n 1⩽i⩽n): 选择一个下标 p ∈…...
[SAP ABAP] DEBUG ABAP程序中的循环语句
在ABAP程序开发中可能会遇到要DEBUG循环语句的情况,这个循环语句可能会执行上万次,但我们希望程序执行循环到100次就停下来,也就是希望DEBUG断点设置在循环语句的第100次停下来观察执行的结果,这时我们可以在DEBUG程序时通过设置一…...
解决阿里云轻量级服务器 Ubuntu 24.04.1 LTS 没网也 ping 不通 8.8.8.8 以及 route -n 没有输出任何转发信息
事情发生在两天前,位于公网的阿里云轻量级服务器(Ubuntu 24.04.1 LTS)忽然没网。主要是上次上服务器进行配置已经是一个多月前,最近也没有做什么事情,就忽然没网了,让人纳闷。更主要的是,上次备…...
AUTOSAR:SOME/IP 概念
文章目录 1. 用例与需求1.1 典型用例1.2 对中间件的要求 2. 协议栈示例3. SOME/IP 概念3.1 中间件整体功能与架构3.2 服务组成元素详细解释 4. 服务发现机制深入剖析5. 总结 1. 用例与需求 1.1 典型用例 信息娱乐系统: 后座娱乐系统连接:允许后排乘客连…...
STM32--中断
中断 中断向量表 定义一段固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址。定义在启动文件中。 中断相关寄存器 内核中断不经过中断使能、除能寄存器。 中断优先级 1、抢占优先级:高高抢占优先级可以打断正在执行的低抢占优先…...
海思3559a开发
目录 固件烧录配置网络nfs挂载虚拟机文件使用telnet连接开发板 固件烧录 1、配置好HiTool烧录工具 需要注意长度必须不小于对应文件大小 2、开始烧录 先点击擦除全器件,重新给开发板上电,擦除成功后如下图所示。 点击烧写,重新给开发板上电…...
优选算法——位运算
1. 常见位运算总结 2. 判定字符是否唯一 题目链接:面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode) 题目展示: 题目分析:本题有很多种做法,这里我们使用位图来解决,这种做法是一种效率很高…...
【JAVA】旅游行业中大数据的使用
一、应用场景 数据采集与整合:全面收集旅游数据,如客流量、游客满意度等,整合形成统一数据集,为后续分析提供便利。 舆情监测与分析:实时监测旅游目的地的舆情信息,运用NLP算法进行智能处理,及…...
使用html和JavaScript实现一个简易的物业管理系统
码实现了一个简易的物业管理系统,主要使用了以下技术和功能: 1.主要技术 使用的技术: HTML: 用于构建网页的基本结构。包括表单、表格、按钮等元素。 CSS: 用于美化网页的外观和布局。设置字体、颜色、边距、对齐方式等样式。 JavaScript…...
浅谈Kubernetes(K8s)之RC控制器与RS控制器
1.RC控制器 1.1RC概述 Replication Controller 控制器会持续监控正在运行的Pod列表,并保证相应类型的Pod的数量与期望相符合,如果Pod数量过少,它会根据Pod模板创建新的副本,反之则会删除多余副本。通过RC可实现了应用服务的高可用…...
如何在 openAI Sora 上生成视频内容
近期OpenAI 推出了我们期待已久的视频生成模型 Sora。能够生成包含多个角色、特定类型的动作以及主体和背景的精确细节的复杂场景。该模型不仅了解用户在提示中要求的内容,还了解这些内容在物理世界中的存在方式。 如何在 openAI Sora 上生成视频内容 使用Sora 视频…...
【Oracle11g SQL详解】日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等
日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等 在 Oracle 数据库中,日期和时间函数用于处理日期和时间数据。它们在记录创建时间、分析时间间隔、格式化输出等场景中非常重要。本文将详细讲解常用的日期和时间函数及其应用。 一、SYSDATE:获…...
STM32 串口收发文本数据包
单片机学习! 目录 前言 一、文本数据包格式 二、串口收发文本数据包代码 三、代码解析 3.1 标志位清除 3.2 数据包接收 四、代码问题改进 总结 前言 本文介绍了串口收发文本数据包程序设计的思路并详解代码作用。 一、文本数据包格式 文本数据包的格式的定义…...
铭记一次项目重大事故
在程序的世界里,bug 就像隐藏在暗处的小怪兽,时不时跳出来捣乱。而职业生涯中,总有那么一个或几个 bug 让我们刻骨铭心。它或许让项目差点夭折,或许让你熬了无数个通宵,或许有着离奇的出现方式和曲折的解决过程。无论是…...
AUTOSAR 汽车开放系统架构
AUTOSAR 官网 AUTOMOTIVE OPEN SYSTEM ARCHITECTURE AUTOSAR (AUTomotive Open System ARchitecture) is a global partnership of leading companies in the automotive and software industry to develop and establish the standardized software framework and open E/E …...
从零用java实现 小红书 springboot vue uniapp (2)主页优化
前言 移动端演示 http://8.146.211.120:8081/#/ 前面的文章我们基本完成了主页的布局 今天我们具体的去进行实现 并且分享我开发时遇到的问题 首先先看效果 java仿小红书主页 实现效果为 1.顶端全屏切换 2.上划加载更多 3.下拉当前页整体刷新 顶端全屏切换我们选择 gui-switch…...
打电话玩手机识别-支持YOLO,COCO,VOC格式的标记,超高识别率可检测到手持打电话, 非接触式打电话,玩手机自拍等
打电话玩手机识别-支持YOLO,COCO,VOC格式的标记,超高识别率可检测到手持打电话, 非接触式打电话,玩手机自拍等1275个图片。 手持打电话: 非接触打电话 玩手机 数据集下载 yolov11:https://download.csdn…...
黑马程序员Java项目实战《苍穹外卖》Day12
苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原…...
实现SpringBoot项目嵌入其他项目
很多时候我们需要在项目里面嵌入其他项目或者被其他项目嵌入,如我们开发一个开源项目b,用户需要在自己的项目a嵌入b项目,使用b项目的功能,而且要实现a项目工作最小化,最好实现引入即用。 1.定义b项目的自定义配置 …...
海康威视摄像头RTSP使用nginx推流到服务器直播教程
思路: 之前2020年在本科的时候,由于项目的需求需要将海康威视的摄像头使用推流服务器到网页进行直播。这里将自己半个月琢磨出来的步骤给大家发一些。切勿转载!!!! 使用网络摄像头中的rtsp协议---------通…...
【自动化】requirements.txt
1.是什么? 用于列出项目依赖的所有Python包及其版本。这使得其他开发者可以轻松地安装与你的项目兼容的环境,或者在不同的机器上复制相同的开发环境。 2.如何编写requirements.txt 手动创建 格式: 包名版本号 在终端home命令自动生成 创建r…...
C++ 中多态性在实际项目中的应用场景
背景与需求 在一个图形绘制软件中,需要绘制多种不同的图形,如圆形、矩形、三角形等。每个图形都有自己的绘制方法,但是它们都可以被看作是一个抽象的 “图形” 概念,并且都有一个共同的操作,比如绘制(draw&…...
手机租赁系统开发指南一站式服务流程解析
内容概要 手机租赁系统的开发是一个复杂但有趣的过程,像搭建乐高一样,只要找到合适的模块,就能打造出一个宾至如归的租赁平台。在这部分,我们将对开发流程的整体结构进行简要概述,并指出每个环节的重要性。 首先&…...
基于Couchbase的数据构建方案:数仓分层
初步方案是将公共层和报表层分别放在不同的bucket中,这种设计从存储和访问优化的角度是合理的,但仍有以下细节需要考虑: 1. 数仓公共层设计(origin bucket) 合理性分析: 将ODS、DWD、DWS层的数据放在一个b…...
Linux中的线程
目录 线程的概念 进程与线程的关系 线程创建 线程终止 线程等待 线程分离 原生线程库 线程局部存储 自己实现线程封装 线程的优缺点 多线程共享与独占资源 线程互斥 互斥锁 自己实现锁的封装 加锁实现互斥的原理 死锁 线程同步 线程的概念 回顾进程相关概念 …...