一、关系数据库与非关系型数据库
1、关系型数据库
关系型数据库是一个结构化的数据库, 创建在关系模型基础上, 一般面向于记录。 它借助于集合代数等数学概念和方法来处理数据库中的数据,。 关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。 现实世界中, 各种实体与实体之间的各种联系都可以用关系模型来表示。 SQL 语句(标准数据查询语言) 就是一种基于关系型数据库的语言, 用于执行对关系型数据库中数据的检索和操作。
-
一个结构化的数据库,创建在关系模型基础上,一般面向于记录
-
包括:Oracle、MySQL、SQL Server、Microsoft Access、DB2等
2、非关系型数据库
NoSQL(NoSQL = Not Only SQL ), 意思是“不仅仅是 SQL”, 是非关系型数据库的总称。
- 除了主流的关系型数据库以外的数据库,都认为是非关系型的
- 包括:Redis、MongDB、Hbase、CouhDB等
以上这些数据库, 他们的存储方式、 存储结构以及使用的场景都是完全不同的。 所以我们认为它是一个非关系型数据库的集合, 而不是像关系型数据库一样, 是一个统称。 换言之, 除了主流的关系型数据库以外的数据库,都认为是非关系型的。 NoSQL 数据库凭借着其非关系型、 分布式、 开源和横向扩展等优势, 被认为是下一代数据库产品。
1) High performance——对数据库高并发读写需求
Web2.0 网站会根据用户的个性化信息来实时生成动态页面和提供动态信息, 因此, 无法使用动态页面静态化技术。 所以数据库的并发负载非常高, 一般会达到 10000 次/s 以上的读写请求。 关系型数据库对于上万次的查询请求还是可以勉强支撑的。 当出现上万次的写数据请求, 硬盘 IO 就已经无法承受了。 对于普通的 BBS 网站, 往往也会存在高并发的写数据请求, 如明星鹿晗在微博上公布恋情, 结果因为流量过大而引发微博瘫痪。
2) Huge Storage——对海量数据高效存储与访问需求
类似于 Facebook、 Friendfeed 这样的 SNS 网站, 每天会产生大量的用户动态信息。 如Friendfeed,一个月就会产生 2.5 亿条用户动态信息, 对于关系型数据库来说, 在一个包含2.5 亿条记录的表中执行 SQL 查询, 效率是非常低的。
3) High Scalability && High Availability——对数据库高可扩展性与高可用性需求
在 Web 架构中, 数据库是最难进行横向扩展的。 当应用系统的用户量与访问量与日俱增时, 数据库是没办法像 Web 服务一样, 简单地通过添加硬件和服务器节点来扩展其性能和负载能力的。 尤其对于一些需要 24 小时对外提供服务的网站来说, 数据库的升级与扩展往往伴随着停机维护与数据迁移, 其工作量是非常庞大的。
关系型数据库和非关系型数据库都有各自的特点与应用场景, 两者的紧密结合将会给web2.0 的数据库发展带来新的思路。 让关系数据库关注在关系上, 非关系型数据库关注在存储上。 例如, 在读写分离的 MySQL 数据库环境中,可以把经常访问的数据存储在非关系型数据库中, 提升访问速度。
二、 Redis 简介
Redis(RemoteDictionaryServer, 远程字典型)是一个开源的、使用 C 语言编写的 NoSQL数据库。 Redis 基于内存运行并支持持久化, 采用 key-value(键值对) 的存储形式, 是目前分布式架构中不可或缺的一环。
=举例:杯子理解成键,水理解成值,通过键找到值=
Redis 服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个 Redis 进程,而 Redis 的实际处理速度则是完全依靠于主进程的执行效率。 若在服务器上只运行一个Redis 进程, 当多个客户端同时访问时, 服务器的处理能力是会有一定程度的下降; 若在同一台服务器上开启多个 Redis 进程, Redis 会提高并发处理能力的同时会给服务器的 CPU 造成很大压力。 也就是说在实际生产环境中, 需要根据实际的需求来决定开启多少个 Redis进程。 若对高并发要求更高一些, 可能会考虑在同一台服务器上开启多个进程; 若 CPU 资源比较紧张, 采用单进程即可。
1、Redis的应用场景
Redis 作为基于内存运行的数据库, 缓存是其最常应用的场景之一, 除此之外, Redis
常见应用场景还包括: 获取最新 N 个数据的操作、 排行榜类应用、 计数器应用、 存储关系、
实时分析系统、 日志记录。
2、Redis的优点
- 具有极高的数据读写速度, 数据读取的速度最高可达到 110000 次/s, 数据写入速度最
高可达到 81000 次/s。 - 支持丰富的数据类型, 不仅仅支持简单的 key-value 类型的数据, 还支持 Strings,
Lists, Hashes, Sets 及 Ordered Sets 等数据类型操作。 - 支持数据的持久化, 可以将内存中的数据保存在磁盘中, 重启的时候可以再次加载进行
使用。 - 原子性, Redis 所有操作都是原子性的。
- 支持数据备份, 即 master-salve 模式的数据备份。
三、Redis 安装部署
Redis 的安装相对于其他服务比较简单,首先需要到 Redis 官网(https://www.redis.io)下载相应的源码软件包, 然后上传至 Linux 系统的服务器中进行解压
通常情况下在 Linux 系统中进行源码编译安装, 需要先执行./configure 进行环境检查与配置, 从而生成Makefile 文件, 再执行 make && make install 命令进行编译安装。 而Redis 源码包中直接提供了 Makefile 文件, 所以在解压完软件包后, 可直接进入解压后的软件包目录, 执行 make 与 make install 命令进行安装。
make install 只是安装了二进制文件到系统中, 并没有启动脚本和配置文件。 软件包中默认提供了一个install_server.sh 脚本文件, 通过该脚本文件可以设置 Redis 服务所需要的相关配置文件。 当脚本运行完毕, Redis 服务就已经启动, 默认侦听端口为 6379
1、安装Redis
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.100.1/bao /abc
[root@localhost ~]# cd /abc
[root@localhost abc]# cd Y2C7
[root@localhost Y2C7]# tar zxvf redis-5.0.4.tar.gz -C /opt
[root@localhost Y2C7]# cd /opt
[root@localhost opt]# ls
redis-5.0.4 rh
[root@localhost opt]# yum -y install gcc gcc-c++ make perl
[root@localhost opt]# cd redis-5.0.4/
[root@localhost redis-5.0.4]# make
[root@localhost redis-5.0.4]# make PREFIX=/usr/local/redis install
安装过程中,更改安装路径可以用make PRRFIX=安装路径 install
[root@localhost redis-5.0.4]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@localhost redis-5.0.4]# cd /opt/redis-5.0.4/utils/
[root@localhost utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] //回车
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] //回车
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] //回车
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] //回车
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server //手动输入
Selected config:
Port : 6379
Config 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/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!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!
[root@localhost utils]# netstat -lnupt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 13415/redis-server
#安装完成, 可通过 Redis 的服务控制脚本/etc/init.d/redis_6379 来对 Redis 服务进行控制, 如停止 Redis 服务、 启动 Redis 服务、 重启 Redis 服务、 查看 Redis 运行状态。
[root@localhost utils]# /etc/init.d/redis_6379 stop //停止 Redis 服务
[root@localhost util