作者:禅与计算机程序设计艺术
1.简介
近年来,随着互联网、移动互联网、云计算、物联网等新兴技术的飞速发展,越来越多的人开始关注并实践着“云端”、“移动化”、“智慧城市”、“人工智能”等互联网+应用场景。而在数据层面上,传统的数据中心带来的巨大的成本、昂贵的维护费用和资源消耗,逐渐成为最大的性能瓶颈。因此,如何有效地对企业进行数据存储与管理是IT行业的热点话题之一。
作为一名架构师,应该有能力掌握当前最流行的数据存储技术、产品架构模式及最佳实践。同时,还要了解业务、用户需求、平台性能等方面的情况,有助于明确目标和设计方案。最后,需要面对数据安全、隐私保护、运维等日益复杂的环节,不断提升自身的架构水平,保障公司数据的完整性、可用性及安全性。因此,作为一名优秀的IT架构师,我将分享一些常用的数据库技术、分布式文件系统、NoSQL数据库、搜索引擎、消息队列等技术在企业级数据存储中的应用和运用。希望能帮助大家快速理解和掌握数据存储的重要性,更好地实现信息的采集、整合、分析、处理和转移,提升工作效率和数据价值。
文章大纲如下:
- 1.企业级数据存储技术概述
- 2.关系型数据库RDBMS与NOSQL技术
- 3.NoSQL技术分类与评估标准
- 4.关系型数据库常用技术
- 5.MySQL高可用集群搭建
- 6.MongoDB数据库集群搭建
- 7.PostgreSQL数据库高可用集群搭建
- 8.HBase数据库集群搭建
- 9.分布式文件系统DFS及其部署
- 10.Apache Hadoop集群安装与配置
- 11.消息队列RocketMQ集群搭建
- 12.搜索引擎ElasticSearch集群搭建
- 13.结论
一、企业级数据存储技术概述
1.1 数据产生的背景和意义
数据是互联网、移动互联网、云计算、物联网等新兴技术的核心驱动力。数据产生的背景和意义是什么?它能给我们带来什么价值?
互联网发展历史悠久,它由一个组织——互联网络互连中心(ICANN)发起,经过多次修正后形成今天的互联网规则。ICANN通过提供域名服务、IP地址分配、电子邮件服务、网络传输协议、数据中心托管、数字证书认证机构、域名注册商等功能,致力于推动互联网的繁荣发展。其中,数据存储服务是目前提供商提供的一种基础服务,它主要包括三方面的内容:
用户上传的原始数据:这类数据包括文本、图片、音频、视频等形式的内容,通常收集到个人设备中。
生成的处理后的数据:这些数据经过各种处理之后生成,用于不同目的,例如广告投放、社交互动、精准营销等。
从用户行为习惯中得到的知识:从用户的使用习惯、偏好、浏览记录、搜索习惯等方面收集的数据称为用户画像数据。
当今社会,数据是经济和文化的基石,是沉淀下来的宝贵财富。数据产生的背景和意义:
数据价值创造:数据本质上是生产价值的载体,数据能够提供给企业的价值很多,例如金融、医疗、保险、制造等领域。
数据为决策提供支持:数据可以根据不同的条件做出有利于决策的预测和建议,例如推荐商品、进行营销活动、排除风险。
数据驱动创新:数据正在重新定义企业的角色、使公司变得越来越复杂,也促进了新事物的出现。例如互联网电商、自动驾驶汽车、智慧城市、人工智能等新兴产业。
数据提升效率:数据是影响效率、改善流程、优化管理的一把钥匙,它可以通过收集、整合、分析、应用、存储、共享、传递等方式,极大地提升工作效率和数据价值。
1.2 数据存储的类型及特点
对于企业级数据存储来说,主要分为两大类:关系型数据库RDBMS和非关系型数据库NoSQL。本文重点讨论关系型数据库RDBMS和非关系型数据库NoSQL。
关系型数据库RDBMS(Relational Database Management System),又称为结构化数据库,属于静态数据模型,采用表格化组织方式,通过键值对的方式存储数据,数据之间存在关联性。关系型数据库的典型代表是Oracle、MySQL、SQL Server等。
非关系型数据库NoSQL(Not only SQL),属于动态数据模型,不需要固定的表结构,数据之间的关联性较弱,数据结构可变化,一般采用文档、图或键值对的方式存储数据。NoSQL数据库的典型代表是Redis、MongoDB、Cassandra等。
1.2.1 RDBMS概览
RDBMS是最古老的关系型数据库,它的数据存储结构是表,采用表格化组织方式,通过键值对的方式存储数据。RDBMS除了具备其他数据库的灵活性外,还有以下特性:
ACID属性:RDBMS具有ACID(Atomicity、Consistency、Isolation、Durability)四个属性,用来确保数据库的事务一致性。ACID四个属性分别对应数据库的原子性、一致性、隔离性、持久性,保证数据安全和完整性。
强关系型约束:RDBMS通过强关系型约束,保证了数据的一致性。强关系型约束包括唯一性、主键约束、外键约束等。
关系模型:RDBMS基于关系模型,支持数据表与表之间的关系定义。
索引机制:RDBMS支持索引机制,对查询的速度进行优化。索引是建立在B树或哈希表上的。
复杂查询语言:RDBMS支持丰富的复杂查询语言,如SQL、PL/SQL、T-SQL等。
1.2.2 NoSQL概览
NoSQL,即Not only SQL的递归缩写,指的是非关系型数据库。相对于RDBMS,NoSQL旨在取代RDBMS,满足现代应用环境下的海量数据、动态数据快速增长、快速响应的需求。NoSQL除了与传统数据库的区别外,还有以下特点:
非固定表结构:NoSQL不使用固定的表结构,数据结构可以灵活的扩展。
分布式存储:NoSQL数据可以在多个节点间分布式地存储,解决单点故障的问题。
可扩展性:NoSQL支持横向扩展,能够应对大数据量、高并发访问的场景。
暂态查询:NoSQL可以使用非结构化查询,适用于多样化的业务场景。
不支持事务:NoSQL一般不支持事务,因为在分布式系统中难以保证事务的完整性和一致性。
二、关系型数据库RDBMS技术
2.1 MySQL
MySQL是最流行的关系型数据库管理系统,可以说是当今世界上最流行的数据库。由于它的开源、免费、跨平台、易用性等特性,尤其是在Web开发领域广泛使用,被广泛应用于各个行业。下面介绍一下MySQL的安装、配置、架构、高可用、备份恢复策略等。
2.1.1 安装
首先下载MySQL,然后按照安装说明进行安装即可。由于MySQL默认端口是3306,所以如果没有修改mysql配置文件,可以直接连接到数据库。如果修改了端口号,则需要使用其他工具如mycli或navicat连接。
sudo apt-get install mysql-server -y
安装完成后,启动MySQL服务器:
sudo systemctl start mysql
确认是否已成功启动:
systemctl status mysql.service
如果启动失败,检查错误日志:
cat /var/log/mysqld.log | grep ERROR
2.1.2 配置
配置MySQL之前,需要先确定你的操作系统,如Linux、Unix或Mac OS X,然后选择合适的包管理器安装MySQL。配置过程包括指定服务器的字符编码、数据库存放路径、启动时自动创建的数据库等。以下是配置命令示例:
sudo vim /etc/mysql/my.cnf # Linux或Mac OS X
sudo nano /etc/my.cnf # Unix
编辑完my.cnf文件后,保存退出,然后运行以下命令使修改生效:
sudo service mysql restart
启动MySQL客户端:
mysql -u root -p
输入密码后,进入MySQL命令行界面,执行如下命令设置密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '<PASSWORD>';
这里的'newpassword'需要替换为你的密码。
2.1.3 创建数据库
登录MySQL客户端后,创建数据库:
CREATE DATABASE mydatabase;
创建完成后,切换至该数据库:
USE mydatabase;
2.1.4 创建表
创建表的语法如下:
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
);
示例:创建一个名为users的表:
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100),
age INT CHECK (age >= 0 AND age <= 150),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
2.1.5 插入数据
插入数据的语法如下:
INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...);
示例:插入一条记录:
INSERT INTO users (id, name, email, age) VALUES (null, 'Alice', 'alice@example.com', 25);
2.1.6 查询数据
查询数据的语法如下:
SELECT * FROM table_name [WHERE condition];
示例:查询所有记录:
SELECT * FROM users;
2.1.7 更新数据
更新数据的语法如下:
UPDATE table_name SET column1 = new_value1, column2 = new_value2 WHERE condition;
示例:更新email字段:
UPDATE users SET email = 'bob@example.com' WHERE id = 1;
2.1.8 删除数据
删除数据的语法如下:
DELETE FROM table_name WHERE condition;
示例:删除第一条记录:
DELETE FROM users LIMIT 1;
2.1.9 导出导入数据
导出数据的语法如下:
SELECT * INTO OUTFILE '/path/to/file.txt' [FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\' LINES TERMINATED BY '\n'] FROM table_name;
示例:导出users表数据到文件:
SELECT * INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\"' LINES TERMINATED BY '\r\n' FROM users;
导入数据的语法如下:
LOAD DATA INFILE '/path/to/file.txt' INTO TABLE table_name [FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\' IGNORE num LINES TERMINATED BY '\n'];
示例:导入users.csv数据到users表:
LOAD DATA INFILE '/tmp/users.csv' INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\"' IGNORE 1 LINES TERMINATED BY '\r\n';
注意:以上命令仅供参考,具体请参阅MySQL官方文档。
2.2 MariaDB
MariaDB是一个开源的MySQL数据库服务器。相比于MySQL,MariaDB在功能和稳定性方面都有所改进,并且与MySQL保持兼容,所以如果你已经使用MySQL,那就无需改动任何代码,直接换成MariaDB就可以。安装MariaDB的方法同MySQL一样。
sudo apt-get install mariadb-server -y
使用命令查看MariaDB版本:
mariadb --version
MariaDB的配置和MySQL基本类似。
2.3 PostgreSQL
PostgreSQL是另一个开源的关系型数据库管理系统。它是数据库领域里的一个顶尖赛场,拥有庞大的社区和活跃的开发者群。与MySQL不同,它是使用ANSI SQL标准开发的,性能卓越、可靠、免费、开源,适合于大规模复杂查询场景。下面介绍一下PostgreSQL的安装、配置、架构、高可用、备份恢复策略等。
2.3.1 安装
首先下载PostgreSQL,然后按照安装说明进行安装即可。由于PostgreSQL默认端口是5432,所以可以直接连接到数据库。
sudo apt-get install postgresql -y
安装完成后,启动PostgreSQL服务器:
sudo systemctl start postgresql
确认是否已成功启动:
systemctl status postgresql.service
如果启动失败,检查错误日志:
cat /var/log/postgresql/postgresql-12-main.log
2.3.2 配置
配置PostgreSQL之前,需要先确定你的操作系统,如Linux、Unix或Mac OS X,然后选择合适的包管理器安装PostgreSQL。配置过程包括指定服务器的字符编码、数据库存放路径、启动时自动创建的数据库等。以下是配置命令示例:
sudo vim /etc/postgresql/12/main/postgresql.conf # Linux或Mac OS X
sudo nano /var/lib/pgsql/12/data/pg_hba.conf # Unix
编辑完postgresql.conf或者pg_hba.conf文件后,保存退出,然后运行以下命令使修改生效:
sudo systemctl reload postgresql
2.3.3 创建数据库
登录PostgreSQL客户端后,创建数据库:
CREATE DATABASE mydatabase;
创建完成后,切换至该数据库:
\c mydatabase
2.3.4 创建表
创建表的语法如下:
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
);
示例:创建一个名为users的表:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100),
age INT CHECK (age >= 0 AND age <= 150),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
SERIAL用于创建自增的主键。
2.3.5 插入数据
插入数据的语法如下:
INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...);
示例:插入一条记录:
INSERT INTO users (name, email, age) VALUES ('Bob', 'bob@example.com', 30);
2.3.6 查询数据
查询数据的语法如下:
SELECT * FROM table_name [WHERE condition];
示例:查询所有记录:
SELECT * FROM users;
2.3.7 更新数据
更新数据的语法如下:
UPDATE table_name SET column1 = new_value1, column2 = new_value2 WHERE condition;
示例:更新email字段:
UPDATE users SET email = 'alice@example.com' WHERE id = 1;
2.3.8 删除数据
删除数据的语法如下:
DELETE FROM table_name WHERE condition;
示例:删除第一条记录:
DELETE FROM users WHERE id = 1;
2.3.9 导出导入数据
导出数据的语法如下:
COPY table_name TO '/path/to/file.txt' WITH DELIMITER ',';
示例:导出users表数据到文件:
COPY users TO '/tmp/users.csv' WITH CSV HEADER;
导入数据的语法如下:
COPY table_name FROM '/path/to/file.txt' WITH DELIMITER ',';
示例:导入users.csv数据到users表:
COPY users FROM '/tmp/users.csv' WITH CSV HEADER;
注意:以上命令仅供参考,具体请参阅PostgreSQL官方文档。
2.4 MongoDB
MongoDB是一个开源的NoSQL数据库管理系统。它支持按需扩展、高性能、高可靠性、分布式和易用性等特性,非常适合于网站、大数据、IoT等应用场景。下面介绍一下MongoDB的安装、配置、架构、高可用、备份恢复策略等。
2.4.1 安装
首先下载MongoDB,然后按照安装说明进行安装即可。由于MongoDB默认端口是27017,所以可以直接连接到数据库。
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.6.tgz
tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.2.6.tgz
mv db /opt/mongodb # 如果目录不存在,创建目录
cd /opt/mongodb/bin # 进入目录
./mongod --config /opt/mongodb/mongod.conf # 启动mongo
启动成功后,在浏览器中打开 http://localhost:28017 ,进入MongoDB控制台页面。
2.4.2 配置
配置MongoDB之前,需要先确定你的操作系统,如Linux、Unix或Mac OS X,然后选择合适的包管理器安装MongoDB。配置过程包括指定服务器的字符编码、数据库存放路径、启动时自动创建的数据库等。以下是配置命令示例:
sudo vi /etc/mongod.conf # Linux或Mac OS X
sudo nano /usr/local/etc/mongod.conf # Unix
编辑完mongod.conf文件后,保存退出,然后运行以下命令使修改生效:
sudo systemctl restart mongod
2.4.3 创建数据库
登录MongoDB客户端后,创建数据库:
use mydatabase;
2.4.4 创建集合
创建集合的语法如下:
db.createCollection("collection_name");
示例:创建一个名为users的集合:
db.createCollection("users");
2.4.5 插入数据
插入数据的语法如下:
db.collection_name.insert({key1: value1, key2: value2,...});
示例:插入一条记录:
db.users.insert({"name": "Bob", "email": "bob@example.com", "age": 30});
2.4.6 查询数据
查询数据的语法如下:
db.collection_name.find(); // 返回所有记录
db.collection_name.findOne(); // 返回第一条匹配记录
示例:查询所有记录:
db.users.find().pretty()
2.4.7 更新数据
更新数据的语法如下:
db.collection_name.updateOne(filter, update, options);
示例:更新email字段:
db.users.updateOne({"name": "Bob"}, {"$set": {"email": "alice@example.com"}});
2.4.8 删除数据
删除数据的语法如下:
db.collection_name.deleteMany(filter, options);
示例:删除所有记录:
db.users.remove({});
2.4.9 导出导入数据
导出数据的语法如下:
mongoexport -d database_name -c collection_name -o file_path.json [-f field1,field2] [--type json|csv] [--fieldsTerminatedBy delimiter] [--ignoreBlanks] [--drop] [--gzip]
示例:导出users集合数据到file.json文件:
mongoexport -d test -c users -o /tmp/file.json
导入数据的语法如下:
mongoimport -d database_name -c collection_name -j|--jsonArray file_path.json|folder_path --upsertFields keys
示例:导入file.json数据到users集合:
mongoimport -d test -c users --jsonArray /tmp/file.json --upsertFields _id
注意:以上命令仅供参考,具体请参阅MongoDB官方文档。
三、非关系型数据库NoSQL技术
3.1 NoSQL技术分类
非关系型数据库(NoSQL)的主要特征是数据模型松散,一般无需预定义数据模型,而是以键值对(Key-Value Pairs)、文档(Documents)、图形(Graphs)等方式存储数据。根据非关系型数据库的不同类型,又可以分为以下几种类型:
列存储数据库Column-Oriented Database:将同一行数据中的相关列存储在一起,支持随机读取、排序和过滤等操作。
文档存储数据库Document-Oriented Database:将数据以文档的形式存储,每一个文档对应一个键值对,文档之间可以嵌套。
键值存储数据库Key-Value Store:以键值对的形式存储数据,键与值都是任意的字节序列。
面向对象的数据库Object-Oriented Database:基于对象的数据模型,以类的形式存储数据,支持面向对象编程,提供了丰富的API接口。
图形数据库Graph Database:支持图形数据模型,允许将数据以节点和边的形式存储。
3.2 NoSQL技术选型
NoSQL技术的选型主要依赖以下三个因素:
数据规模大小:非关系型数据库的设计目标就是应对海量数据的存储,因此数据的规模大小决定了使用的技术。
查询复杂度:关系型数据库的查询复杂度比较高,处理大量数据的查询效率较差,而NoSQL数据库可以进行快速检索。
数据持久化要求:非关系型数据库的持久化可以完全交给操作系统来处理,数据发生故障或宕机时不会丢失数据,数据可以快速恢复。
一般情况下,我们可以根据项目的要求来选择NoSQL数据库。以下是一些常用的NoSQL数据库:
Redis:Redis是一个开源的高性能键值存储数据库,适用于缓存、存储、消息队列等场景。
MongoDB:MongoDB是一个开源的NoSQL数据库,提供文档数据库、分布式数据库、可扩充性和高可用性。
Cassandra:Apache Cassandra是由Facebook开发的高可用、高性能、免费的分散式NoSQL数据库。
HBase:Hadoop数据库堆栈的核心组件之一,HBase是一种分布式、可扩展的、面向列的数据库。
Couchbase:Couchbase是一个开源的NoSQL文档数据库,支持分布式、高可用、水平可伸缩的架构。
Neo4J:Neo4J是一个开源的NoSQL图形数据库,可用于构建复杂的关系图,并提供强大的查询语言。
3.3 Redis
Redis(Remote Dictionary Server)是一个开源的高性能键值存储数据库。Redis支持数据的持久化,支持多种数据结构,并提供了许多内置命令,是目前最流行的NoSQL数据库之一。下面介绍一下Redis的安装、配置、架构、高可用、备份恢复策略等。
3.3.1 安装
首先下载Redis,然后按照安装说明进行安装即可。
sudo apt-get install redis-server -y
安装完成后,启动Redis服务器:
redis-server
确认是否已成功启动:
ps aux | grep redis
如果启动失败,检查错误日志:
tail /var/log/syslog | grep redis
3.3.2 配置
Redis的配置非常简单,一般不需要修改,但为了安全考虑,还是建议修改一下配置。配置文件位于/etc/redis.conf。
bind 127.0.0.1 # 只允许本地连接
protected-mode yes # 使用auth验证密码
port 6379 # 设置监听端口
daemonize no # 以守护进程方式启动
logfile "" # 不记录日志
另外,建议开启内存淘汰机制(maxmemory),防止内存泄露。
3.3.3 创建数据库
Redis没有自己的数据库概念,只能通过键值对(Key-Value Pairs)的方式来存储数据,所以不需要创建独立的数据库。
3.3.4 操作数据
操作Redis数据库的命令一般分为两种类型:
字符串类型String:用于存储简单的字符串数据,如名称、邮箱等。
列表类型List:用于存储多个元素,按照插入顺序排序,类似于链表。
散列类型Hash:用于存储多个键值对,每个键值对映射到特定的值。
集合类型Set:用于存储集合,无序且唯一。
有序集合类型Sorted Set:用于存储有序集合,可以通过分值来获取数据。
3.3.4.1 字符串类型
字符串类型String命令包括SET GET INCRDECR APPEND MGET。
SET name "Bob" # 添加或更新键值对
GET name # 获取键值
INCR age # 增加值
DECR age # 减少值
APPEND phone "+86-xxx-xx" # 在末尾追加值
MGET name phone # 获取多个键值
3.3.4.2 列表类型
列表类型List命令包括LPUSH RPUSH LPOP RPOP LRANGE LTRIM LINDEX LINSERT LLEN。
RPUSH list "item1" "item2" "item3" # 右侧添加元素
LPOP list # 左侧移除元素
RPOP list # 右侧移除元素
LRANGE list 0 -1 # 获取列表所有元素
LTRIM list 1 2 # 截取范围内元素
LINDEX list 1 # 获取指定索引元素
LINSERT list BEFORE "item2" "itemX" # 在指定元素前插入元素
LLEN list # 获取列表长度
3.3.4.3 散列类型
散列类型Hash命令包括HSET HGET HDEL HEXISTS HKEYS HVALS HINCRBY HSCAN。
HSET user:1 name Bob # 添加或更新键值对
HGET user:1 name # 获取键值
HDEL user:1 name # 删除键值对
HEXISTS user:1 name # 判断键是否存在
HKEYS user:* # 获取所有键
HVALS user:* # 获取所有值
HINCRBY user:1 age 1 # 增加值
HSCAN user:* 0 match "user:*" # 遍历所有键值对
3.3.4.4 集合类型
集合类型Set命令包括SADD SREM SCARD SISMEMBER SMEMBERS SRANDMEMBER。
SADD set item1 item2 item3 # 添加元素
SREM set item1 item2 # 移除元素
SCARD set # 获取元素个数
SISMEMBER set item # 判断元素是否存在
SMEMBERS set # 获取所有元素
SRANDMEMBER set # 随机获取元素
3.3.4.5 有序集合类型
有序集合类型Sorted Set命令包括ZADD ZREM ZCARD ZRANK ZRANGE ZREVRANGE ZSCORE ZCOUNT ZUNIONSTORE ZINTERSTORE。
ZADD zset 10 score1 member1 # 添加或更新元素
ZREM zset member1 # 移除元素
ZCARD zset # 获取元素个数
ZRANK zset member1 # 获取元素排名
ZRANGE zset 0 -1 withscores # 获取所有元素
ZREVRANGE zset 0 -1 withscores # 获取所有元素(降序)
ZSCORE zset member1 # 获取元素分值
ZCOUNT zset 10 20 # 获取分值在[10,20]之间的元素个数
ZUNIONSTORE outkey 2 zset1 zset2 WEIGHTS 1 2 # 合并两个集合
ZINTERSTORE outkey 2 zset1 zset2 # 交集
3.3.5 查看统计信息
Redis提供了INFO命令用于查看统计信息,包括CPU、内存、网络、持久化、命令、键空间等。
redis-cli info memory # 查看内存统计信息
redis-cli info stats # 查看统计信息
redis-cli config get max* # 查看配置文件参数
3.3.6 主从复制
Redis提供了主从复制功能,可以让主服务器拥有读写权限,从服务器只负责读操作。可以实现读写分离,提高Redis的高可用性。
redis-cli slaveof <masterip> <masterport> # 将当前服务器设置为从服务器
3.3.7 发布订阅
Redis提供了发布订阅功能,可以实现一对多、多对多的通信模式。
SUBSCRIBE channel1 # 订阅频道
PUBLISH channel1 msg # 发布消息
UNSUBSCRIBE channel1 # 取消订阅
3.3.8 事务
Redis提供了事务功能,可以一次执行多个命令,实现原子性。
MULTI # 开始事务
SET a 1 # 命令1
SET b 2 # 命令2
EXEC # 执行事务
3.3.9 附加功能
Redis还有其他一些高级功能,如持久化、脚本、监视器等。下面介绍几个常用的功能。
3.3.9.1 持久化
Redis支持快照和aof两种持久化方式。
save # 手动触发快照持久化
bgsave # 后台异步触发快照持久化
lastsave # 获取上次快照持久化时间
aof持久化功能可以减少磁盘I/O,对于高写入密集的应用场景非常有帮助。
appendonly yes # 修改配置文件启用aof持久化
redis-cli bgrewriteaof # 手动触发aof重写
3.3.9.2 脚本
Redis提供了脚本功能,可以加载Lua脚本到服务器中,并在服务器执行。
-- hello.lua
return "hello world"
EVALSHA sha1 hello.lua 0 # 通过sha1校验码执行脚本
EVAL "return 'hello world'" 0 # 直接执行脚本
3.3.9.3 监视器
Redis提供了监视器功能,可以监听Redis的命令,并记录到日志文件中。
MONITOR # 开启监视器
日志文件位于/var/log/redis/redis-server.log。
以上是Redis的一些基础知识,更多命令及用法请参考官方文档。
四、总结
本文介绍了几种常用的数据存储技术,包括关系型数据库RDBMS、非关系型数据库NoSQL。其中,关系型数据库RDBMS主要介绍了MySQL、MariaDB、PostgreSQL、MongoDB等产品。非关系型数据库NoSQL主要介绍了Redis、MongoDB等产品。
对于关系型数据库RDBMS,主要介绍了安装、配置、架构、高可用、备份恢复策略、数据操作等内容;对于非关系型数据库NoSQL,主要介绍了技术分类、技术选型、数据模型、技术特点、安装、配置、架构、高可用、备份恢复策略、数据操作等内容。
最后,针对RDBMS和NoSQL,提出了数据量大小、查询复杂度、数据持久化要求等因素,以及数据存储的特点和原则。