> 技术文档 > Linux云计算 |【第四阶段】NOSQL-DAY1

Linux云计算 |【第四阶段】NOSQL-DAY1


主要内容:

NoSQL概述(RDBMS、NoSQL)、部署Redis服务、Redis数据类型(字符串、散列类型、列表类型、集合类型、有序集合类型)、Redis其它操作命令、修改Redis服务运行参数、部署支持PHP和Redis的Nginx服务器

一、NoSQL概述

NoSQL(Not Only SQL)是一类非关系型数据库管理系统(DBMS),它们不使用传统的基于表格的关系模型,而是采用各种不同的数据模型来存储和检索数据。NoSQL 数据库的设计目的是为了解决传统关系型数据库在某些场景下的局限性,特别是在处理大规模数据、高并发访问和分布式系统时。

1、数据类型

① RDBMS

  • 关系数据库管理系统:Relational Database Management System
  • 按照预先设置的组织结构,将数据存储在物理介质上,数据之间可以做关联操作
  • 主流的RDBMS软件:MySQL、MariaDB、Oracle、DB2、SQL Server、PostgreSQL

② NoSQL

  • 泛指非关系型数据库:Not Only SQL(意为\"不仅仅是SQL\")
  • 不需要预先定义数据存储结构,每条记录可以有不同的数据类型和字段个数
  • 在一些数据库结构经常变化,数据结构不定的系统中,就非常适合使用NoSQL来存储。比如监控系统中的监控信息的存储,可能每种类型的监控信息都不太一样。这样可以避免经常对MySQL进行表结构调整,增加字段带来的性能问题。
  • 这种架构的缺点就是数据直接存储在NoSQL中,不能做关系数据库的复杂查询,如果由于需求变更,需要进行某些查询,可能无法满足,所以采用这种架构的时候需要确认未来是否会进行复杂关系查询以及如何应对。
  • 主流NoSQL软件:Redis、Memcached、MongoDB、CouchDB、Neo4j、FlockDB

2、NoSQL的主要特点:

  • 非关系型:

NoSQL 数据库不使用 SQL 作为查询语言,而是使用其他查询语言或 API。
数据模型通常是非关系型的,如键值对、文档、列族、图等。

  • 分布式:

NoSQL 数据库通常设计为分布式系统,能够水平扩展,支持大规模数据存储和高并发访问。
支持数据分片(Sharding)和复制(Replication),提高系统的可用性和性能。

  • 灵活性:

NoSQL 数据库通常具有动态模式(Schema),允许在运行时添加或修改数据结构,而不需要停机或重新设计数据库。
适合处理半结构化或非结构化数据。

  • 高性能:

由于去除了复杂的关系模型和事务处理,NoSQL 数据库通常具有更高的读写性能。
适合处理实时数据分析和高吞吐量的应用场景。

  • 高可用性:

NoSQL 数据库通常设计为高可用性,支持自动故障转移和数据冗余。
适合需要持续在线服务的应用场景。

3、常见 NoSQL 数据库类型:

键值存储(Key-Value Stores):

  • 数据模型:键值对。
  • 示例:Redis、Riak。

文档存储(Document Stores):

  • 数据模型:文档(通常是 JSON 或 BSON 格式)。
  • 示例:MongoDB、CouchDB。

列族存储(Column Family Stores):

  • 数据模型:列族(Column Families)。
  • 示例:Apache Cassandra、HBase。

图数据库(Graph Databases):

  • 数据模型:图结构(节点、边、属性)。
  • 示例:Neo4j、OrientDB。

二、Redis介绍

Redis(Remote Dictionary Server)是一个开源的、高性能的键值存储系统,通常被称为数据结构服务器。它支持多种数据结构,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。Redis 的设计目标是提供极高的性能和灵活性,适用于多种应用场景,如缓存、消息队列、实时分析等。

官方网站:www.redis.cn/

主要特点:
高性能:

  • Redis 是内存数据库,数据存储在内存中,因此读写速度非常快。
  • 支持持久化(Persistence),可以将数据定期保存到磁盘,防止数据丢失。

数据结构丰富:

  • 支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。
  • 每种数据结构都有丰富的操作命令,如增删改查、排序、聚合等。

原子操作:

  • Redis 的所有操作都是原子的,适合处理并发访问。
  • 支持事务(Transaction),可以将多个命令打包成一个事务执行。

高可用性:

  • 支持主从复制(Master-Slave Replication),提高系统的可用性和读写性能。
  • 支持哨兵(Sentinel)机制,自动监控和管理 Redis 集群,实现故障转移。

分布式:

  • 支持集群(Cluster)模式,可以将数据分布到多个节点,实现水平扩展。
  • 支持分片(Sharding),可以将数据分散到不同的节点,提高系统的吞吐量。

灵活性:

  • 支持多种编程语言的客户端库,如 Python、Java、Node.js 等。
  • 支持多种持久化方式,如 RDB(快照)和 AOF(日志)。

应用场景:

  1. 作为缓存层,存储频繁访问的数据,减少数据库的负载。适合处理高并发的读写请求,如 Web 应用的会话管理、页面缓存等。
  2. 作为轻量级的消息队列,支持发布/订阅(Pub/Sub)模式。适合处理实时消息传递,如聊天系统、实时通知等。
  3. 作为实时数据存储和分析平台,支持高效的聚合操作。适合处理实时统计、排行榜、计数器等。
  4. 作为会话存储,存储用户会话数据,支持分布式会话管理。适合处理分布式应用的会话管理,如 Web 应用、移动应用等。
  5. 作为分布式锁服务,支持高效的锁机制,防止并发冲突。适合处理分布式系统的并发控制,如分布式任务调度、资源管理等。

1、部署Redis服务

搭建Redis服务的三个主要步骤:安装gcc编译器、编译安装、添加PATH环境变量、初始化启动服务

  • 源码包目录:redis-4.0.8/
  • 执行程序路径:/usr/local/redis/bin
  • 初始化配置脚本:redis-4.0.8/utils/install_server.sh
  • 服务启动脚本:/etc/init.d/redis_6379
  • 数据库数据目录:/var/lib/redis/6379/

步骤1:部署redis服务(参考:/linux-soft/4/redis-4.0.8.tar.gz)

wget http://download.redis.io/releases/redis-4.0.8.tar.gz //没有安装包可联网下载

1)安装gcc编译器

[root@redis ~]# yum -y install gcc

2)解压redis-4.0.8.tar.gz压缩包

[root@redis ~]# tar -xf redis-4.0.8.tar.gz[root@redis ~]# cd redis-4.0.8/[root@redis redis-4.0.8]# ls

3)修改安装目录为/usr/local/redis/

[root@redis redis-4.0.8]# vim +27 src/MakefilePREFIX?=/usr/local/redis…

4)编译安装(解压后,已配置好Makefile,无需configure,直接make编译调用gcc)

[root@redis redis-4.0.8]# make && make install

5)将redis命令目录添加至PATH环境变量

[root@redis1 redis-4.0.8]# vim /etc/bashrc //尾部追加export PATH=$PATH:/usr/local/redis/bin[root@redis1 redis-4.0.8]# source /etc/bashrc //或者退出重新打开终端

6)初始化redis服务(直接回车采用默认值)

切换到源码目录下的utils,运行初始化配置脚本install_server.sh

[root@redis redis-4.0.8]# ./utils/install_server.shWelcome to the redis service installerThis script will help you easily set up a running redis serverPlease select the redis port for this instance: [6379] //指定端口,Redis服务默认端口为6379Selecting default: 6379Please select the redis config file name [/etc/redis/6379.conf] //指定主配置文件Selected default - /etc/redis/6379.confPlease select the redis log file name [/var/log/redis_6379.log] //指定日志文件Selected default - /var/log/redis_6379.logPlease select the data directory for this instance [/var/lib/redis/6379] //指定数据库目录Selected default - /var/lib/redis/6379Please select the redis executable path [/usr/local/redis/bin/redis-server] //指定程序调用Selected config:Port : 6379 //端口6379Config file : /etc/redis/6379.conf //配置文件Log file : /var/log/redis_6379.log //日志文件Data dir : /var/lib/redis/6379 //数据目录Executable : /usr/local/redis/bin/redis-server//启动程序目录Cli Executable : /usr/local/redis/bin/redis-cli //命令行接口Is this ok? Then press ENTER to go on or Ctrl-C to abort.Copied /tmp/6379.conf => /etc/init.d/redis_6379 //服务启动脚本Installing service...Successfully added to chkconfig!Successfully added to runlevels 345!Starting Redis server...Installation successful!

补充:初始化配置完成后,默认运行Redis服务;

常见报错:未初始化redis或未启动服务,使用redis-cli提示服务拒绝访问

[root@redis1 ~]# redis-cliCould not connect to Redis at 127.0.0.1:6379: Connection refusedCould not connect to Redis at 127.0.0.1:6379: Connection refusednot connected> exit

7)验证Redis服务

① 查看服务状态:

# 使用/etc/init.d/redis_6379路径方式查看服务状态

[root@redis ~]# /etc/init.d/redis_6379 statusRedis is running (5030)

# 使用service方式查看服务状态

[root@redis ~]# service redis_6379 status //以前版本没有systemctl,用的就是serviceRedis is running (5030)

# 查看服务端口状态信息

[root@redis ~]# ss -nlptu | grep :6379tcp LISTEN 0 128 127.0.0.1:6379 *:* users:((\"redis-server\",pid=5030,fd=6))

② 关闭服务:

# 使用/etc/init.d/redis_6379路径方式关闭服务

[root@redis ~]# service redis_6379 stopStopping ...Redis stopped

# 使用service方式关闭服务

[root@redis ~]# /etc/init.d/redis_6379 stopStopping ...Redis stopped

③ 开启服务:

# 使用/etc/init.d/redis_6379路径方式开启服务

[root@redis ~]# /etc/init.d/redis_6379 startStarting Redis server...

# 使用service方式开启服务

[root@redis ~]# service redis_6379 startStarting Redis server...

④ 重启服务:

# 使用/etc/init.d/redis_6379路径方式重启服务

[root@redis ~]# /etc/init.d/redis_6379 restartStopping ...Redis stoppedStarting Redis server...

# 使用service方式重启服务

[root@redis ~]# service redis_6379 restartStopping ...Redis stoppedStarting Redis server...

⑤ 连接Redis服务:

[root@redis ~]# redis-cli127.0.0.1:6379> ping //测试服务,正常返回PONGPONG127.0.0.1:6379> exit

2、Redis数据类型

Redis数据类型包括:字符型、列表型、哈希型、集合型、有序集合型;

1. 字符型(String)

特点:最基本的数据类型,存储字符串、整数或浮点数。支持原子操作,如增减操作(INCR、DECR)。

SET key value:设置键值对。

GET key:获取键对应的值。

INC

惊喜号发现新知