文章目录



一、认识NoSQL

1.1 NoSQL 概念与发展

NoSQL指的是非关系型的数据库。​NoSQL​有时也称作​Not Only SQL​的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

NoSQL用于超大规模数据的存储。(例如谷歌​Facebook​每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供​SQL​功能的关系数据库。

2009年,Last.fm​Johan Oskarsson​发起了一次关于分布式开源数据库的讨论,来自​Rackspace​​Eric Evans​再次提出了​NoSQL​的概念,这时的​NoSQL​主要指非关系型、分布式、不提供ACID的数据库设计模式

2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是​"select fun, profit from real_world where relational=false;"​。因此,对​NoSQL​最普遍的解释是​"非关联型的"​,强调​Key-Value Stores​​文档数据库​的优点,而不是单纯的反对​RDBMS​


1.2 为什么使用NoSQL

今天我们可以通过第三方平台(如:Google,​Facebook​等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那​SQL数据库​已经不适合这些应用了, ​NoSQL​数据库的发展却能很好的处理这些大的数据。

【Redis】初识 Redis_数据

返回顶部


1.3 与SQL的联系与区别

【Redis】初识 Redis_数据_02

  • 结构化(表) & 非结构化(K-V、文档、图)

【Redis】初识 Redis_redis_03

  • 关联的 & 非关联

【Redis】初识 Redis_redis_04

  • SQL查询 & 非SQL

【Redis】初识 Redis_数据_05

  • ACID(事务) & BASE(无事务)

总结:

【Redis】初识 Redis_nosql_06

  • 性能肯定是内存更高
  • 垂直是指SQL设计之初没有考虑到数据的分片存储,都是存贮在本地机器上,虽然支持主从但是并没有提升数据的量(仅备份层面);水平是指考虑到了分片需求,根据id通过哈希算法获取标识,将数据存储在指定的节点上

返回顶部


1.4 拓展 - CAP定理

在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer’s theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistency)(所有节点在同一时间具有相同的数据)
  • 可用性(Availability)(保证每个请求不管成功或者失败都有响应)
  • 分隔容忍(Partition tolerance)(系统中任意信息的丢失或失败不会影响系统的继续运作)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

【Redis】初识 Redis_数据库_07

返回顶部


1.5 拓展 - BASE & ACID

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:

  • Basically Available --基本可用
  • Soft-state --软状态/柔性事务。 “Soft state” 可以理解为"无连接"的, 而 “Hard state” 是"面向连接"的
  • Eventually Consistency – 最终一致性, 也是 ACID 的最终目的。

ACID

BASE

原子性(Atomicity)

基本可用(Basically Available)

一致性(Consistency)

软状态/柔性事务(Soft state)

隔离性(Isolation)

最终一致性 (Eventual consistency)

持久性 (Durable)

返回顶部


1.6 NoSQL数据库分类

类型

部分代表

特点

列存储

Hbase

Cassandra

Hypertable

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,

对针对某一列或者某几列的查询有非常大的IO优势。

文档存储

MongoDB

CouchDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,

实现关系数据库的某些功能。

K-V存储

Tokyo Cabine

t / Tyrant

BerkeleyDB

MemcacheDB

Redis

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储

Neo4J

FlockDB

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

对象存储

db4o

Versant

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xml数据库

Berkeley DB XMLBaseX

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。

返回顶部


二、认识Redis

Redis诞生于2009年全称是​Remote Dictionary Server​,远程词典服务器,是一个基于内存的键值型NoSQL数据库。

【Redis】初识 Redis_nosql_08

“兄弟们,SQL性能不太好,咱们来重新写一个~”

特征:

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性 (6.0单纯网络请求部分为多线程)
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据持久化
  • 支持主从集群、分片集群
  • 支持多语言客户端

返回顶部


三、安装Redis

大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7.

Redis的官方网站地址:​​https://redis.io/​

1.单机安装Redis

1.1 安装Redis依赖

Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:

yum install

1.2 上传安装包并解压

然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:

【Redis】初识 Redis_数据_09

例如,我放到了/usr/local/src 目录:

【Redis】初识 Redis_redis_10

解压缩:

tar -xzf redis-6.2.6.tar.gz

解压后:

【Redis】初识 Redis_redis_11

进入redis目录:

cd redis-6.2.6

运行编译命令:

make && make install

如果没有出错,应该就安装成功了。

默认的安装路径是在 /usr/local/bin目录下:

【Redis】初识 Redis_数据_12

该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:

  • redis-cli:是 redis 提供的命令行客户端
  • redis-server:是 redis 的服务端启动脚本
  • redis-sentinel:是 redis 的哨兵启动脚本

返回顶部


1.3 启动

redis的启动方式有很多种,例如:

  • 默认启动
  • 指定配置启动
  • 开机自启

1.3.1 默认启动

安装完成后,在任意目录输入redis-server命令即可启动​Redis​

redis-server

如图:

【Redis】初识 Redis_nosql_13

这种启动属于前台启动,会阻塞整个会话窗口,窗口关闭或者按下​CTRL + C​则Redis停止。不推荐使用。

返回顶部


1.3.2 指定配置启动

如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(​/usr/local/src/redis-6.2.6​),名字叫​redis.conf​

【Redis】初识 Redis_redis_14

我们先将这个配置文件备份一份:

cp

然后修改redis.conf文件中的一些配置:

# 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 密码,设置后访问Redis必须输入密码
requirepass 123456

Redis的其它常见配置:

# 监听的端口
port 6379
# 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录
dir .
# 数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15
databases 1
# 设置redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile "redis.log"

启动Redis:

# 进入redis安装目录 
cd /usr/local/src/redis-6.2.6
# 启动

查看Redis启动进程:

ps -ef | grep

【Redis】初识 Redis_nosql_15

停止服务:

# 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务,
# 因为之前配置了密码,因此需要通过 -u 来指定密码
redis-cli -u 123456 shutdown

返回顶部


1.3.3 开机自启

我们也可以通过配置来实现开机自启。

首先,新建一个系统服务文件:

vi

内容如下:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后重载系统服务:

systemctl daemon-reload

现在,我们可以用下面这组命令来操作redis了:

# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态

执行下面的命令,可以让redis开机自启:

systemctl enable

返回顶部


2.Redis客户端

安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括:

  • 命令行客户端
  • 图形化桌面客户端
  • 编程客户端

2.1 Redis命令行客户端

Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:

redis-cli [options] [commonds]

其中常见的options有:

  • -h 127.0.0.1:指定要连接的​edis​节点的IP地址,默认是​127.0.0.1​
  • -p 6379:指定要连接的​redis​节点的端口,默认是​6379​
  • -a 123456:指定​redis​的访问密码

其中的commonds就是Redis的操作命令,例如:

  • ​ping​​​:与redis服务端做心跳测试,服务端正常会返回​​pong​

不指定commond时,会进入redis-cli的交互控制台:

【Redis】初识 Redis_数据_16

返回顶部


2.2 图形化桌面客户端

GitHub上的大神编写了Redis的图形化桌面客户端,地址:https://github.com/uglide/RedisDesktopManager

不过该仓库提供的是RedisDesktopManager的源码,并未提供windows安装包。

在下面这个仓库可以找到安装包:https://github.com/lework/RedisDesktopManager-Windows/releases

【Redis】初识 Redis_客户端_17

2.2.1 安装

在课前资料中可以找到Redis的图形化桌面客户端:

【Redis】初识 Redis_数据_18

解压缩后,运行安装程序即可安装:

【Redis】初识 Redis_数据库_19

安装完成后,在安装目录下找到rdm.exe文件:

【Redis】初识 Redis_数据库_20

双击即可运行:

【Redis】初识 Redis_redis_21

返回顶部


2.2.2 建立连接

点击左上角的连接到Redis服务器按钮:

【Redis】初识 Redis_客户端_22

在弹出的窗口中填写Redis服务信息:

【Redis】初识 Redis_数据_23

点击确定后,在左侧菜单会出现这个链接:

【Redis】初识 Redis_redis_24

点击即可建立连接了:

【Redis】初识 Redis_数据库_25

Redis默认有16个仓库,编号从0至15. 通过配置文件可以设置仓库数量,但是不超过16,并且不能自定义仓库名称。

如果是基于redis-cli连接Redis服务,可以通过select命令来选择数据库:

# 选择 0号库
select 0

返回顶部


2.2.3 简单使用

【Redis】初识 Redis_nosql_26

使用图形化界面,点击 + 创建键值对数据进行存储。

在命令行客户端进行数据的访问,首先选择库编号为1,然后使用get key去获取键名:

【Redis】初识 Redis_数据库_27

返回顶部