持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
什么是持久化
对于计算机理论来讲,是把业务模型存储到磁盘里,但是存储到内存里并不是真正的持久化,因为断电关机存储的数据就会消失,所以需要存储到磁盘里才算是持久化。
存储的手段
把业务模型存储到磁盘里,至少有两种常用的方式:
- 存储到关系
MySQL关系数据库 mongodb非关系型存储服务
存储实现持久化
什么时候需要数据库
如果存储的数据量较小而且数据类型的种类比较单一,是不需要数据库的,反之则需要数据库的加持
数据存储到本地文件系统
实现持久化不一定需要数据库,那把数据存到本地,在java中是把数据存储成csv格式文件,Nodejs存储比较简洁,把JSON的字面量序列化后直接存储
- 写入和读取流程
首先通过
fs.readFile解析读取JSON文件,并转换成字面量格式,再通过fs.writeFile写入到该文件内
const fs = require("fs");
function setVal(key, value) {
fs.readFile("./test.json", (err, data) => {
const json = data ? JSON.parse(data) : {};
// 读取成功
fs.writeFile("./test.json", JSON.stringify(json = json[key]), err => {
if (err) {
console.log(err);
}
// 写入成功
});
});
}
注意!存储时需要再把该文件格式转换成JSON字符串
- 运行存储 通过调用命令行接口来运行存储机制,命令行读取实际上是运行了文件流机制
//命令行
set a
get a
运行Nodejs进程,通过process,再内读取实际上是stdin流,输出是stdOut,读取流的时候希望把整个流,每次再命令行输入完成后按下回车开始执行,通过readLine库实现
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("line", function(input) {
const [op, key, value] = input.split(" ");
if (op === 'get') {
} else if (op === 'set') {
setVal(key, value)
} else if(op === 'quit'){
rl.close();
}else {
console.log('没有该操作');
}
});
rl.on('line')每次点击回车时,回调on方法,内有三个参数op, key, value,根据输入的值来进行判断
结束该程序,执行rl.on('close')回调
rl.on("close", function() {
process.exit(0);
});