Node中的数据存储主要有
- 内存和文件系统数据存储
- 传统的关系型数据库存储
- 非关系型数据库存储
- 此次主要写的是非关系型数据库存储中的Redis,其余数据存储方式略谈
内存存储
内存存储的理想用途是存放少量经常使用的数据,这种数据的读取和写入都很快,但服务器和程序重启后数据就丢了;
基于文件的存储
用文件系统 fs 存放数据,存储在本地或服务器上,重启后数据还在;问题是:如果有两个用户同时修改了同一份文件,保存一个版本会覆盖另一个版本,导致其中一个用户数据丢失,所以对于多用户程序而言,不推荐使用基于文件的存储;
关系型数据库
关系型数据库管理系统(RDBMS)可以存储复杂的信息,并且查询起来很容易,历来被用在相对高端复杂的程序上,主要用的是MySQL,MySQL设置简单,且有很大的用户群;
非关系型数据库
对于实时分析或消息传递,NoSQL数据库可能是更好的选择,而且NoSQL数据库通常不用预先设置schemas,对于那种要把数据存储在层次结构中,但层次结构却会发生变化的程序而言,是很有帮助的,其中代表为Mongo和Redis;
* 现在重点来说Redis
Redis把数据存在RAM中,并在磁盘中记录数据的变化,虽然存储空间有限,但数据操作非常快,假如Redis服务器崩了,RAM中的内容丢失,可以用磁盘中的日志恢复数据;Redis支持常用的数据结构:哈希表、链表、键值对(作为简单的变量使用)
- 安装(Windows)
https://github.com/MicrosoftArchive/redis/releases
解压 => 新建一个redis文件夹 => 将解压后的64bit文件内容全移至redis中 => 运行终端
=> 将 redis-server.exe 拖至终端运行 (如下)
如此,Redis就已经在本地上运行起来了
- 写入数据
|
|
运行以上代码,就在本地6379端口连接Redis,并创建一个简单的键值对
新开了一个终端,将redis中的 redis-cli.exe 拖进终端运行,可查看当前Redis中的数据;切记保持上一个终端,不可关闭!
|
|
运行以上代码,创建一个哈希表,存入数据,hget 取的是对应键名的数据,hkeys 取的是当前Redis中该哈希表存在的键
|
|
运行以上代码,会创建一个列表,列表按顺序将数据插入,查询列表的时候需要带参数,第一个参数为从哪条数据开始取,第二个元素是取到第几条数据(0代表从第一条数据开始,-1代表取到最后一个元素)
|
|
运行以上代码,会创建一个集合,并将数据写入集合里,但集合中的元素是唯一的,将两个相同的值写入,第二次的写入将会被忽略
以上便是Redis基础知识!
后话
- 一个程序中可使用多种存储机制,比如一个内容管理系统,可能会用文件存储Web程序的配置选项,用MongoDB存储文章,用Redis存储用户给出的文章评级