Redis6之(一)NoSQL数据库简介及Redis在linux上的安装
一、NoSQL数据库简介
1.1 技术发展
技术的分类
- 解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
- 解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis
- 解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch
1.1.1 Web1.0时代
Web1.0 时代,数据访问量很有限,用一夫当关的高性能的单点服务器
可以解决大部分问题。
1.1.2 Web2.0时代
随着 Web2.0 时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。
1.1.3 解决CPU及内存压力
问题:两个服务器之间的session如何共享呢?
-
方案1:存在cookie里
弊端:不安全、网络负担效率低。
-
方案2:存在文件服务器或数据库中
弊端:当数据量大时,IO的效率问题。
-
方案3:session复制
弊端:session数据冗余问题,节点越多浪费越大。
-
方案4:使用缓存数据库
好处:直接放在内存中,减轻IO压力,极大地提高读速度,减少IO的读操作。
1.1.4 解决IO压力
将NoSQL数据库作为缓存使用,提高访问速度,减少IO的读操作。
1.2 NoSQL数据库
1.2.1 NoSQL数据库概述
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库
。
NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
- 不遵循SQL标准。
- 不支持ACID。
- 远超于SQL的性能
1.2.2 NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的使用
1.2.3 NoSQL不适用场景
- 需要事务支持
- 基于 sql 的结构化查询存储,处理复杂的关系,需要即席查询。
(用不着sql的和用了sql也不行的情况,就考虑用NoSql)
1.2.4 常见的几种NoSQL数据库
-
Memcache
- 很早出现的NoSql数据库
- 数据都在内存中,一般不持久化
- 支持简单的 key-value 模式,支持类型单一
- 一般是作为缓存数据库辅助持久化的数据库
-
Redis
- 几乎覆盖了Memcached的绝大部分功能
- 数据都在内存中,支持持久化,主要用作备份恢复
- 除了支持简单的 key-value 模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
- 一般是作为缓存数据库辅助持久化的数据库
-
MongDB
- 高性能、开源、模式自由(schema free)的文档型数据库
- 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
- 虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
- 支持二进制数据及大型对象
- 可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。
1.3 行式存储数据库
行式存储数据库就是按照行来存储数据的。
举个栗子:现在有一张表,数据如下
id | name | city | age |
---|---|---|---|
1 | 张三 | 北京 | 20 |
2 | 李四 | 上海 | 45 |
3 | 王五 | 哈尔滨 | 30 |
以行为单位存储对象的信息,根据新存储的 index来查询某个对象的全部信息,这个速度无疑是快了很多。
1.4 列式存储数据库
列式存储数据库就是按照列来存储数据的。
以列为单位进行存储,便于查询某个属性的数据。
二、Redis的概述安装
2.1 Redis的应用场景
2.1.1 配合关系型数据库做高速缓存
- 高频次,热门访问的数据,降低数据库IO
- 分布式架构,做 session共享
2.1.2 多样的数据结构存储持久化数据
2.2 Redis安装步骤
说明:redis 在windows下解压即可使用,这里只阐述 redis在linux系统下的安装配置。
2.2.1 安装版本
我这里使用的版本是:6.2.1 for Linux(redis-6.2.1.tar.gz
)
2.2.2 准备工作
-
安装C语言的编译环境
redis是用C语言开发的一个开源的高性能键值对数据库,所以首先需要安装C语言的编译环境。
-
下载安装最新版的 gcc编译器:
yum install centos-release-scl scl-utils-build; yym install -y devtoolset-8-toolchain; scl enable devtoolset-8 bash;
-
测试 gcc版本:
gcc --version
-
-
上传 redis 压缩包
可以利用 Xftp 7工具将文件上传,也可以使用命令进行文件上传。
将压缩包上传至 /opt目录下,查看压缩包存在:
2.2.3 解压redis压缩包
tar -zxvf redis-6.2.1.tar.gz
2.2.4 执行 make操作
-
进入解压目录执行 make命令(只是编译好)
make
-
继续执行 make install命令
make install
2.2.5 执行 make命令出错
如果没有准备好C语言编译环境,make 会报错—Jemalloc/jemalloc.h:没有那个文件。
解决方案:
运行 make distclean命令后再次执行 make命令。
make distclean;
make;
make install;
2.2.6 查看默认安装目录
默认安装目录为:/usr/local/bin
redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何;
redis-check-aof:修复有问题的AOF文件;
redis-check-dump:修复有问题的dump.rdb文件;
redis-sentinel:Redis集群使用;
redis-server:Redis服务器启动命令;
redis-cli:客户端,操作入口;
2.3 Redis的启动
2.3.1 前台启动(不推荐)
前台启动:启动后命令行窗口不能关闭,否则服务器停止。
-
启动 redis服务
redis-server
-
查看 redis是否启动
ps -ef | grep redis
2.3.2 后台启动(推荐)
-
备份 redis.conf
cp /opt/redis-6.2.1/redis.conf /etc
将 redis.conf 配置文件复制到 etc 目录下 。
-
后台启动设置 daemonize no改成yes
daemonize:yes
: redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式
。在该模式下,redis会在后台运行
,并将进程 pid号写入至 redis.conf选项 pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。daemonize:no
: 当 daemonize选项设置成 no时,当前界面将进入 redis的命令行界面
,exit强制退出或者关闭连接工具(putty,xshell等)都会导致 redis进程退出。vi redis.conf
-
Redis 启动
redis-server /etc/redis.conf; ps -ef | grep redis
2.3.3 用客户端访问
redis-cli
2.3.4 Redis 关闭
-
单实例关闭
redis-cli shutdown
也可以进入终端后使用:shutdown 命令关闭。 -
多实例关闭
指定端口关闭:redis-cli -p 6379 shutdown
这个关闭方式一般在集群里使用。
2.4 Redis介绍相关知识
2.4.1 Redis相关知识
- 默认有16个数据库,类似数组下标从0开始,初始默认用0号库;
- 可以使用命令 select 库编号来切换数据库;
- 统一管理密码,即所有库的密码相同;
- dbsize查看当前数据库的key的数量;
- flushdb清空当前库;
- flushall通杀全部库。
2.4.2 Redis是单线程+多路IO复用技术
多路复用是指使用一个线程来检查多个文件扫描符的就绪状态,比如调用 select和 poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回;否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一线程里执行,也可以启动线程执行(比如使用线程池)。
-
串行
按照顺序一个一个执行。
-
多线程+锁(memcached)
多个操作进行,每个操作加锁。
-
单线程+多路IO复用
只有一个对象去做单线程操作,剩下的对象做多路IO复用操作。