三期总目录链接
目录
一、Redis介绍
(一)关系型数据库与非关系型数据库
数据库按照其架构可以分为关系型数据库与其他数据库,其他数据库统称为非关系型数据库
1、关系型数据库
一个结构化的数据库,创建在关系模型基础上,一般面向于记录
主流的关系型数据库有:Oracle、MySQL、SQL Server、Microsoft Access、DB2等
2、非关系型数据库
NoSQL(NoSQL=Not Only SQL):意思是“不仅仅是SQL”,是非关系型数据库的总称,它可以作为关系型数据库的良好补充;随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题
主流的关系型数据库有:Redis、MongBD、Hbase、CouhDB等
3、非关系型数据库产生背景
3.1 High performance——对数据库高并发读写需求
web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求
3.2 Huge Storage——对海量数据高效存储与访问需求
类似Facebook,twitter,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付
3.3 High Scalability && High Availability——对数据库高可扩展性与高可用性需求
在web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,其工作量是非常庞大的
关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给 Web 2.0的数据库发展带来新的思路。
让关系型数据库关注在关系上,非关系型数据库关注在存储上
(二)Redis基础
1、Redis简介
Redis是一个开源的、使用c语言编写、支持网络、基于内存运行并支持持久化的日志型,采用key-value(键值对)数据库
2、Redis的优点
1)具有极高的数据读写速度
redis是将数据存放到内存中,由于内容存取速度快所以redis被广泛应用在互联网项目中,redis优点:存取速度快,官方称读取速度会达到30万次每秒,写速度在10万次每秒最少,具体限制于硬件
2)支持丰富的数据类型
redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前Redis支持的键值数据类型有:字符串类型 散列类型 列表类型 集合类型
3)支持数据的持久化
可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务
缺点:对持久化支持不够良好
所以redis一般不作为数据的主数据库存储,一般配合传统的关系型数据库使用
4)原子性
redis的所有操作都是原子性的
5)支持数据备份
master-slave模式的数据备份
6)功能丰富
Redis可以为每个键设置生存时间,时间到期后该键被自动删除,这一功能配合出色的性能让Redis可以作为缓存系统来用
作为缓存系统,Redis还可以限定数据占用的最大内存空间,在数据达到空间限制后可以按照一定的规则自动淘汰不需要的键。
Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性能的优先级队列
Redis还支持“发布/订阅”的消息模式
3、应用场景
Redis 作为基于内存运行的数据库,缓存是其较常应用的场景之一,除此之外,Redis常见应用场景还包括获取最新N个数据的操作.排行榜类应用.计数器应用、存储关系、实时分析系统,日志记录等
适用场景:数据高并发的读写;海量数据的读写;对扩展性要求高的数据
4、Redis安装部署
编译安装redis
[root@C7-06 ~]# tar xf redis-3.2.9.tar.gz -C /usr/src
[root@C7-06 ~]# cd /usr/src/redis-3.2.9/
[root@C7-06 redis-3.2.9]# ls #查看
00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
源码包提供了makefile文件,直接编译安装即可
[root@C7-06 redis-3.2.9]# make
.......
...
[root@C7-06 redis-3.2.9]# make install
cd src && make install
make[1]: 进入目录“/usr/src/redis-3.2.9/src”
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: 离开目录“/usr/src/redis-3.2.9/src”
说明:在安装过程中,如果想更改默认路径可以使用下面的命令格式:
made PREFIX=安装路径 install
make install 只是安装了二进制文件到系统中,没有启动脚本和配置文件;软件包中默认提供了一个install_server脚本文件,通过该脚本可以设置Redis服务所需要的相关配置文件。
[root@C7-06 redis-3.2.9]# cd /usr/src/redis-3.2.9/utils/
[root@C7-06 utils]# ls
build-static-symbols.tcl generate-command-help.rb lru redis-sha1.rb
cluster_fail_time.tcl hashtable redis-copy.rb releasetools
corrupt_rdb.c hyperloglog redis_init_script speed-regression.tcl
create-cluster install_server.sh redis_init_script.tpl whatisdoing.sh
[root@C7-06 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] #执行命令
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/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!
Starting Redis server...
Installation successful!
[root@C7-06 utils]# netstat -anpt|grep redis #查看redis端口
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4750/redis-server 1
安装完成后可以使用/etc/init.d/redis_6379 来进行启动、停止、重启服务
[root@C7-06 utils]# /etc/init.d/redis_6379 stop #停止服务
Stopping ...
Redis stopped
[root@C7-06 utils]# netstat -anpt|grep redis
[root@C7-06 ~]# /etc/init.d/redis_6379 start #启动服务
Starting Redis server...
[root@C7-06 ~]# netstat -anpt|grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4946/redis-server 1
[root@C7-06 ~]# /etc/init.d/redis_6379 restart #重启服务
Stopping ...
Redis stopped
Starting Redis server...
[root@C7-06 ~]# /etc/init.d/redis_6379 status #查看状态
Redis is running (4974)
编辑redis主配置文件:绑定当前ip地址(只修改ip其他为介绍)
[root@C7-06 ~]# vim /etc/redis/6379.conf
......
...
bind 127.0.0.1 192.168.1.1 #添加本机地址:192.168.1.1 在62行
.......
...
保存退出
[root@C7-06 ~]# /etc/init.d/redis_6379 restart #重启服务
Stopping ...
Redis stopped
Starting Redis server...
如果出现 Could not connect to Redis at 127.0.0.1:6379: Connection refused 的报错
[root@C-06 utils]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>
打开配置文件找到 daemonize no 修改为 daemonize yes 这样就可以默认启动后台运行
redis主配置文件解释
[root@C7-06 ~]# grep -v "^#" /etc/redis/6379.conf | grep -v "^$"
bind 192.168.1.1 #监听的主机地址
protected-mode yes #是否开启保护模式,默认开启,已指定bind和密码:只会本地进行访问,拒绝外部访问,未指定bind和密码:最好关闭,设置为no
port 6379