Redis持久化机制详解:保障数据安全的关键策略
在现代应用开发中,Redis作为高性能的内存数据库被广泛使用。然而,内存的易失性特性使得持久化成为Redis设计中的关键环节。本文将全面剖析Redis的持久化机制,包括RDB、AOF以及混合持久化模式,帮助开发者根据业务需求选择最适合的持久化策略。
一、Redis持久化概述
1.1 为什么需要持久化
Redis虽然以内存存储著称,但单纯依赖内存存在明显缺陷:
-
服务器重启导致数据丢失
-
系统崩溃时无法恢复数据
-
缺乏灾难恢复能力
持久化机制正是为了解决这些问题而设计,它通过将内存中的数据以特定形式保存到磁盘,实现了数据的持久存储。
1.2 持久化核心目标
Redis持久化设计追求三个核心目标:
-
数据安全性:最大限度减少数据丢失风险
-
性能影响:最小化对正常操作的性能影响
-
恢复效率:保证数据快速恢复
二、RDB持久化详解
2.1 RDB工作原理
RDB(Redis Database)是Redis默认的持久化方式,其核心是通过创建数据快照来实现持久化:
-
触发机制:当满足配置的保存条件时,Redis会fork一个子进程
-
数据写入:子进程将内存数据集写入临时RDB文件
-
文件替换:写入完成后替换旧的RDB文件
2.2 配置参数解析
save 900 1 # 15分钟内至少1个key变化
save 300 10 # 5分钟内至少10个key变化
save 60 10000 # 1分钟内至少10000个key变化dbfilename dump.rdb # RDB文件名
dir ./ # 存储目录
rdbcompression yes # 启用压缩
stop-writes-on-bgsave-error yes # 保存出错时停止写入
2.3 RDB的优劣分析
优势:
-
性能影响小:主进程不直接参与磁盘I/O
-
恢复速度快:二进制格式加载效率高
-
文件紧凑:适合备份和传输
-
版本兼容性好:不同Redis版本间RDB格式兼容
劣势:
-
数据丢失风险:两次快照间的数据可能丢失
-
大数据集fork耗时:数据集大时fork操作可能阻塞服务
-
不够实时:无法做到秒级持久化
2.4 适用场景
RDB特别适合以下场景:
-
需要定期备份
-
对恢复速度要求高
-
可以容忍几分钟的数据丢失
-
需要保存历史版本数据
三、AOF持久化深度解析
3.1 AOF工作机制
AOF(Append Only File)通过记录写命令来实现持久化:
-
命令记录:将每个写命令追加到AOF缓冲区
-
文件同步:根据配置策略将缓冲区内容写入磁盘
-
文件重写:定期压缩AOF文件体积
3.2 关键配置参数
appendonly yes # 启用AOF
appendfilename "appendonly.aof" # AOF文件名
appendfsync everysec # 同步策略(推荐)auto-aof-rewrite-percentage 100 # 增长100%时触发重写
auto-aof-rewrite-min-size 64mb # AOF文件最小重写大小
aof-load-truncated yes # 加载截断的AOF文件
3.3 同步策略对比
策略 | 描述 | 数据安全性 | 性能影响 |
---|---|---|---|
always | 每个命令都同步 | 最高(零丢失) | 最差 |
everysec | 每秒同步一次 | 高(最多丢失1秒数据) | 中等(推荐) |
no | 由操作系统控制 | 低 | 最小 |
3.4 AOF优势与不足
优势:
-
数据安全:最多丢失1秒数据
-
可读性强:文本格式便于分析
-
自动修复:redis-check-aof工具可修复损坏文件
-
灵活重写:后台进程重写不影响服务
不足:
-
文件体积大:相同数据集比RDB大
-
恢复速度慢:需要重新执行所有命令
-
性能影响:同步策略影响吞吐量
3.5 AOF重写机制
AOF重写是解决文件膨胀的关键:
-
触发条件:基于大小增长比例和最小大小
-
执行过程:
-
创建子进程扫描数据库
-
生成当前数据集的最小命令集
-
替换旧AOF文件
-
-
混合持久化:Redis 4.0+可在重写时结合RDB格式
四、混合持久化:最佳实践
4.1 混合持久化原理
Redis 4.0引入的混合模式结合了RDB和AOF的优点:
-
重写过程:生成RDB格式的全量数据
-
增量追加:将重写期间的命令以AOF格式追加
-
文件结构:RDB头 + AOF尾
4.2 配置方式
aof-use-rdb-preamble yes # 启用混合持久化
4.3 混合模式优势
-
快速恢复:RDB部分加速加载
-
数据安全:AOF部分保证最新数据
-
文件优化:比纯AOF文件更紧凑
-
兼容性好:旧版Redis可识别RDB部分
五、持久化策略选型指南
5.1 对比总结
特性 | RDB | AOF | 混合模式 |
---|---|---|---|
数据安全 | 低 | 高 | 高 |
恢复速度 | 快 | 慢 | 较快 |
文件大小 | 小 | 大 | 中等 |
性能影响 | 低 | 中高 | 中 |
版本要求 | 所有 | 所有 | 4.0+ |
5.2 选型建议
-
纯RDB:
-
适合数据可再生的缓存场景
-
需要频繁备份的场景
-
对恢复速度要求极高
-
-
纯AOF:
-
金融级数据安全要求
-
写入量不大但需要持久化
-
需要审计日志的场景
-
-
混合模式:
-
大多数生产环境的理想选择
-
需要平衡安全与性能
-
Redis 4.0+版本推荐
-
5.3 生产环境配置建议
# 基础配置
dir /var/lib/redis # 指定持久化目录
dbfilename dump.rdb# RDB配置
save 900 1
save 300 10
save 60 10000# AOF配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
aof-use-rdb-preamble yes # 启用混合模式# 高级配置
no-appendfsync-on-rewrite yes # 重写时不进行fsync
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
六、持久化性能优化
6.1 关键优化点
-
fork优化:
-
使用物理机而非虚拟机
-
确保足够内存
-
考虑使用THP(Transparent Huge Pages)
-
-
磁盘I/O优化:
-
使用SSD硬盘
-
AOF单独挂载磁盘
-
调整内核I/O调度策略
-
-
配置调优:
-
合理设置保存条件
-
根据负载调整rewrite阈值
-
监控持久化延迟
-
6.2 监控指标
-
持久化延迟:
latest_fork_usec
-
AOF状态:
aof_current_size
,aof_buffer_length
-
RDB状态:
rdb_last_save_time
,rdb_changes_since_last_save
-
子进程资源:监控CPU和内存使用
七、灾难恢复方案
7.1 备份策略
-
多副本存储:
-
本地+远程备份
-
不同物理设备存储
-
云环境跨可用区备份
-
-
备份频率:
-
RDB: 根据save配置自动备份
-
AOF: 实时持续备份
-
手动备份: 重大变更前执行BGSAVE
-
7.2 恢复流程
-
RDB恢复:
-
将备份RDB文件放入配置目录
-
启动Redis自动加载
-
-
AOF恢复:
-
使用redis-check-aof修复文件
-
确保AOF文件完整
-
启动Redis自动重放
-
-
混合恢复:
-
优先使用AOF文件
-
自动识别RDB部分加速加载
-
八、常见问题解答
Q1: 如何从RDB切换到AOF?
-
备份当前RDB文件
-
修改配置启用AOF
-
执行
CONFIG SET appendonly yes
-
重启Redis确保配置持久化
Q2: AOF文件损坏如何处理?
redis-check-aof --fix appendonly.aof
Q3: 持久化影响性能怎么办?
-
调整保存频率
-
使用混合持久化
-
优化硬件配置
-
考虑主从架构分担压力
Q4: 如何验证持久化文件有效性?
# 检查RDB
redis-check-rdb dump.rdb# 检查AOF
redis-check-aof appendonly.aof
结语
Redis持久化是保障数据安全的核心机制,理解RDB、AOF和混合持久化的原理与适用场景,对于构建可靠的Redis应用至关重要。在实际生产中,建议根据业务需求和数据重要性选择合适的持久化策略,并配合监控和备份方案,构建完整的数据安全保障体系。
随着Redis的持续发展,持久化机制也在不断优化,建议保持对Redis新版本的关注,及时采用更先进的持久化技术,为业务数据提供更可靠的保护。
相关文章:
Redis持久化机制详解:保障数据安全的关键策略
在现代应用开发中,Redis作为高性能的内存数据库被广泛使用。然而,内存的易失性特性使得持久化成为Redis设计中的关键环节。本文将全面剖析Redis的持久化机制,包括RDB、AOF以及混合持久化模式,帮助开发者根据业务需求选择最适合的持…...
经典算法 求C(N, K) % mod,保证mod是质数
求C(N, K) % mod,保证mod是质数 问题描述 给你三个整数N,K,mod保证mod是一个质数,求组合数C(N, K) % mod。 输入描述 输入有多组,输入第一行为两个整数T,mod。接下来2 - T 1行,每行输入N, K。 输出描…...
NY309NY318美光科技颗粒NY319NY320
NY309NY318美光科技颗粒NY319NY320 技术解析:架构创新与性能突围 美光科技的NY系列颗粒(如NY309、NY318、NY319、NY320)延续了其在存储技术领域的创新基因。以NY319为例,其采用16层BiCS3 3D NAND工艺,通过浮栅&#…...
Buildroot 移植MiniGUI: 编写简单示例(基于君正X2000)
概述 上一篇文章: Buildroot 移植MiniGUI, 在编译打包完文件系统后, 编写一个Demo进一步验证MiniGUI的功能. 目标平台: 键值CPUX2000架构mips内存128MB存储256MBLCD600*1024 MiniGUI 的三种运行模式 在编写第一个 MiniGUI 程序之前,需要了解如下事实࿱…...
flutter长列表 ListView、GridView、SingleChildScrollView、CustomScrollView区别
组件名称用途/适合场景是否懒加载支持列表结构用法复杂度SingleChildScrollView适用于内容数量不大、不重复的页面(如表单、静态内容)❌ 否❌ 否⭐⭐ListView适用于垂直方向的长列表,自动滚动;适合展示大量数据✅ 支持✅ 是⭐⭐Li…...
OpenCV透视变换
概念 OpenCV 透视变换是将图像从一个视平面投影到另一个视平面的过程,也叫投影映射 ,属于空间立体三维变换。它基于透视原理,通过 33 的变换矩阵作用于图像像素坐标来实现映射转换 ,能模拟人眼或相机镜头观看三维空间物体时的透视…...
Node.js 实战四:数据库集成最佳实践
你写了个登录接口,用上了 JWT;然后,产品来了句: “用户数据能分页查吗?能关联公司信息吗?我们这边还有多语言字段…” 你发现:SQL 写得越来越长,关联越来越绕,字段越来越…...
【JDBC】JDBC概述、历史版本及特征
1_JDBC概述 什么是JDBC JDBC(Java DataBase Connectivity, Java数据库连接) ,是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成 有了JDBC,程序员只需用JDBC API写一个程序…...
redis的pipline使用结合线程池优化实战
文章目录 代码讲解与事务 (MULTI/EXEC) 的区别在你这段代码里的价值可能的坑实战建议 代码 /*** 批量根据用户 ID 查询用户信息** param findUsersByIdsReqDTO* return*/Overridepublic Response<List<FindUserByIdRspDTO>> findByIds(FindUsersByIdsReqDTO findUs…...
【RabbitMQ】整合 SpringBoot,实现工作队列、发布/订阅、路由和通配符模式
文章目录 工作队列模式引入依赖配置声明生产者代码消费者代码 发布/订阅模式引入依赖声明生产者代码发送消息 消费者代码运行程序 路由模式声明生产者代码消费者代码运行程序 通配符模式声明生产者代码消费者代码运行程序 工作队列模式 引入依赖 我们在创建 SpringBoot 项目的…...
MySQL初阶:sql事务和索引
索引(index) 可以类似理解为一本书的目录,一个表可以有多个索引。 索引的意义和代价 在MySQL中使用select进行查询时会经过: 1.先遍历表 2.将条件带入每行记录中进行判断,看是否符合 3.不符合就跳过 但当表中的…...
使用教程:8x16模拟开关阵列可级联XY脚双向导通自动化接线
以下通过点亮LED进行基本使用流程演示,实际可以连接复杂外设(SPI、CAN、ADC等) 单模块使用 RX、TX、5V和GND接到串口模块;X5接5V;Y2接LED;LED-接GND 串口模块插上电脑后,LED没有亮;因为此时模…...
很啰嗦,再次总结 DOM
DOM (文档对象模型) 详解 一、DOM 基础概念 1. 定义与作用 DOM(Document Object Model)即文档对象模型,是一种用于 HTML 和 XML 文档的编程接口。它将文档解析为一个由节点和对象组成的树状结构,允许程序和脚本动态访问、修改文…...
文件读取漏洞路径与防御总结
文件读取漏洞路径与防御总结 文件读取漏洞允许攻击者通过路径遍历等手段访问未授权的文件。以下是Linux和Windows系统中常见敏感路径的归纳及防御建议: Linux 系统常见敏感路径 系统关键文件: /etc/passwd:用户账户信息(可被用来…...
电池的充放电电流中C的含义
充电电池的充放电电流标注为 -0.2C、1C、2C 等参数时,其含义与电池的容量和充放电速率直接相关。以下是详细解释: 1. 什么是 “C” 值? • C 是电池的 额定容量(Capacity) 的缩写,单位为 Ah(安时…...
文章记单词 | 第91篇(六级)
一,单词释义 stride /straɪd/- v. 大步走;跨越;迈进 /n. 大步;进展;步幅diplomatic /ˌdɪpləˈmtɪk/- adj. 外交的;有手腕的conquer /ˈkɒŋkə(r)/- v. 征服;战胜;克服geogra…...
Nginx应用场景详解与配置指南
1. 什么是Nginx? Nginx(发音为"engine-x")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它以高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 2. Nginx的主要应用场景 2.1 …...
【Ubuntu】Waydroid-Linux安卓模拟器安装
✅ 1. 安装 Waydroid sudo apt update sudo apt install curl ca-certificates gnupg git -y curl -s https://repo.waydro.id | sudo bash sudo apt install waydroid -y sudo apt install dbus-x11✅ 2. 初始化 Waydroid 使用普通system版本: sudo waydroid in…...
设计模式 - 单例模式 - Tips
为什么双重检查会带来空指针异常问题? if (instance null) { synchronized (Singleton.class) { if (instance null) { instance new Singleton(); } } …...
设计模式7大原则与UML类图详解
设计模式7大原则与UML类图详解 引言 🌟 在软件工程领域,设计模式和UML(统一建模语言)是提高代码质量、增强系统可维护性的重要工具。设计模式提供了解决软件设计中常见问题的通用方案,而UML则为我们提供了一种可视化的…...
如何分析动态采样引起的计划不稳定 | OceanBase SQL 调优实践
这篇博客涉及两个知识点,一个是动态采样,另一个是 DAS 执行。 用户的问题和相关结论 我们看看用户在OceanBase 社区论坛发帖中提出的疑问及其所得出的结论。 问题:收集统计信息之前,为什么会出现计划不稳定的情况? …...
NY321NY322美光闪存芯片NY323NY336
NY321NY322美光闪存芯片NY323NY336 在存储技术飞速发展的今天,美光科技的闪存芯片凭借其创新架构与高性能表现,已成为工业自动化、智能终端等领域的核心组件。本文将围绕技术解析、产品评测、行业趋势、应用案例及市场动态五大维度,深入探讨…...
HMDB51数据集划分
生成训练集、验证集和测试集 每个split文件应该包含: 训练集(id1): 70个视频测试集(id2): 30个视频未使用(id0): 剩余视频 这是一个70/30的训练/测试分割比例。标记为0的视频被排除在当前实验之外。实际上训练集(id1),验证集&am…...
25、DeepSeek-R1论文笔记
DeepSeek-R1论文笔记 1、研究背景与核心目标2、核心模型与技术路线3、蒸馏技术与小模型优化4、训练过程简介5、COT思维链(Chain of Thought)6、强化学习算法(GRPO)7、冷启动**1. 冷启动的目的****2. 冷启动的实现步骤****3. 冷启动…...
CodeBuddy 打造响应式测试平台:ScreenLab 的诞生记
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 开发工具:CodeBuddy(AI 代码伙伴) 技术栈:Vue3 Vite 原生 CSS…...
STM32实战指南:SG90舵机控制原理与代码详解
知识点1【SG90的简述】 SG90是一款微型舵机(Micro Servo),由TowerPro等厂商提供,广泛用于机器人,舵机云台,舵机控制教学等项目中。 1、基本参数 2、工作原理 SG90内部有电机,齿轮组ÿ…...
基于Spring Boot和Vue的在线考试系统架构设计与实现(源码+论文+部署讲解等)
源码项目获取联系 请文末卡片dd我获取更详细的演示视频 系统介绍 基于Spring Boot和Vue的在线考试系统。为学生和教师/管理员提供一个高效、便捷的在线学习、考试及管理平台。系统采用前后端分离的架构,后端基于成熟稳定的Spring Boot框架,负责数据处理…...
开源RTOS(实时操作系统):nuttx 编译
开源RTOS(实时操作系统):nuttx 编译 手册:Installing — NuttX latest documentation 源码:GitHub - apache/nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS) Installing The fir…...
C++学习:六个月从基础到就业——C++11/14:decltype关键字
C学习:六个月从基础到就业——C11/14:decltype关键字 本文是我C学习之旅系列的第四十二篇技术文章,也是第三阶段"现代C特性"的第四篇,主要介绍C11/14中的decltype关键字。查看完整系列目录了解更多内容。 引言 在现代C…...
【51】快速获取数码管段选表(含小数点)及字母表的工具(分享)
1 介绍 1.1 画面 1.2 用法 输入IO口和段码字母的映射关系,比如这里e4d5dp2,指的是bit4是e段,bit5是d段,bit2是小数点dp段。 然后选择有效电平(1表示亮 or 0表示亮)。 点击生成段码配置,即可得到…...
高频面试题(含笔试高频算法整理)基本总结回顾120
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
5月17日
这几天不知道为啥没更新。可能是玩得太疯了。或者是考试有点集中?? 线性代数开课了,英语昨天完成了debate 昨天中午debate结束我们就出去玩了,去的那里时光民俗,别墅很好,770平米,但是缺点是可…...
摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程
摩方12代N200迷你主机标配 Intel AX201无线网卡,支持 WiFi 6 协议(802.11ax)及蓝牙5.2。此网卡兼容主流抓包工具,但需注意: 驱动兼容性:Ubuntu 20.04及以上内核版本(5.4)默认支持AX2…...
从零开始:使用 PyTorch 构建深度学习网络
从零开始:使用 PyTorch 构建深度学习网络 目录 PyTorch 简介环境配置PyTorch 基础构建神经网络训练模型评估与测试案例实战:手写数字识别进阶技巧常见问题解答 PyTorch 简介 PyTorch 是一个开源的深度学习框架,由 Facebook(现…...
应用层自定义协议与序列化
应用层自定义协议与序列化 应用层协议网络版计算器序列化和反序列化序列化反序列化 重新理解read、write、recv、send和TCP为什么支持全双工代码结构Jsoncpp特性安装序列化使用Json::Value的toStyledString方法使用Json::StreamWriter使用Json::FastWriter 反序列化使用Json::R…...
2025春训第二十场
问题 B: 狗是啥呀 题目描述 在神秘的地狱深处,有着一种神秘的犬类生物,据传这种生物长了x个脑袋,并且具有强大的生命力。由于见过它的人全都下落不明,至今没有人知道它的真面目。 一位勇士为了斩杀这奇怪的生物,来到地…...
分糖果--思维+while判断
1.从左到右只考虑右边一遍,再从右到左考虑左边一遍,相当于左右考虑了 2.然后关键是1遍不一定行,while循环直到成功 https://www.luogu.com.cn/problem/B4091 #include<bits/stdc.h> using namespace std; #define N 100011 typedef …...
[system-design] ByteByteGo_Note Summary
目录 通信协议 REST API 与 GraphQL gRPC 如何工作? 什么是Webhook? 如何提高应用程序接口的性能? HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC) SOAP vs REST vs GraphQL vs RPC 代码优先与应用程序接口优先 HTT…...
Flask项目实践:构建功能完善的博客系统(含评论与标签功能)
引言 在Python Web开发领域,Flask以其轻量级、灵活性和易用性赢得了众多开发者的青睐。本文将带您从零开始构建一个功能完善的博客系统,包含文章发布、评论互动和标签分类等核心功能。通过这个实战项目,您不仅能掌握Flask的核心技术…...
Python爬虫实战:获取1688商品信息
在电商领域,获取1688商品信息对于市场分析、竞品研究、用户体验优化等至关重要。1688作为国内领先的B2B电商平台,提供了丰富的商品资源。通过Python爬虫技术,我们可以高效地获取1688商品的详细信息,包括商品名称、价格、图片、描述…...
Canva 推出自有应用生成器以与 Bolt 和 Lovable 竞争
AI 目前是一个巨大的市场,每个人都想从中分一杯羹。 即使是 Canva,这个以拖放图形设计而闻名的流行设计平台,也在其 Canva Create 2025 活动中发布了自己版本的代码生成器,加入了 AI 竞赛。 但为什么一个以设计为先的平台会提供代码生成工具呢? 乍看之下,这似乎有些不…...
多平台屏幕江湖生存指南
UniApp 屏幕适配大师:多平台屏幕江湖生存指南 屏幕江湖:尺寸混战 屏幕适配就像是应对不同体型的客人:从迷你的手机屏,到标准的平板,再到巨大的电视屏幕,你的应用必须有如武林高手般的适应力。 ┌──────────────────────────────────…...
BootCDN介绍(Bootstrap主导的前端开源项目免费CDN加速服务)
文章目录 BootCDN前端开源项目CDN加速服务全解析什么是BootCDN技术原理与架构CDN技术基础BootCDN架构特点1. 全球分布式节点网络2. 智能DNS解析系统3. 高效缓存管理机制4. 自动同步更新机制5. HTTPS和HTTP/2协议支持 BootCDN的核心优势速度与稳定性开源免费资源丰富度技术规范遵…...
LeetCode 153. 寻找旋转排序数组中的最小值:二分查找法详解及高频疑问解析
文章目录 问题描述算法思路:二分查找法关键步骤 代码实现代码解释高频疑问解答1. 为什么循环条件是 left < right 而不是 left < right?2. 为什么比较 nums[mid] > nums[right] 而不是 nums[left] < nums[mid]?3. 为什么 right …...
刷leetcodehot100返航版--二叉树
二叉树理论基础 二叉树的种类 满二叉树和完全二叉树,二叉树搜索树 满二叉树 如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 节点个数2^n-1【n为树的深度】 完全二叉树 在完全二叉树…...
「Mac畅玩AIGC与多模态41」开发篇36 - 用 ArkTS 构建聚合搜索前端页面
一、概述 本篇基于上一节 Python 实现的双通道搜索服务(聚合 SearxNG 本地知识库),构建一个完整的 HarmonyOS ArkTS 前端页面。用户可在输入框中输入关键词,实时查询本地服务 http://localhost:5001/search?q...,返…...
【LINUX操作系统】生产者消费者模型(下):封装、信号量与环形队列
1.封装、完善基于阻塞队列的productor-consumer module 前文中我们封装了自己的Mutex 【LINUX操作系统】线程同步与互斥-CSDN博客 按照老规矩,现在我们对同步与互斥的理解更进一步了,现在把这种面向过程的语言封装成面向对象的写法 1.1 封装条件变量 #p…...
项目管理学习-CSPM-4考试总结
前言 经过两个月左右时间的学习,今天(2025年5月17日)参加了CSPM-4的考试,仿佛回到了2011年参加软考高项的时候。中午12点考完出来后,手都是酸酸的。不过整体感觉还可以,和预想的差不多。CSPM-4的考试一共有…...
自己手写tomcat项目
一:Servlet的原理 在Servlet(接口中)有: 1.init():初始化servlet 2.getServletConfig():获取当前servlet的配置信息 3.service():服务器(在HttpServlet中实现,目的是为了更好的匹配http的请求方式) 4.g…...
C语言—再学习(结构体)
一、建立结构体 用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体。 struct Student { int num; //学号char name[20]; //名字为字符串char sex; //性别int age; //年纪float score; //分数char addr[30]; 地址为字符…...