NoSQL(Not Only SQL)
- **不仅仅是SQL**- **泛指非关系型数据库**- **不需要预先定义数据存储结构**- **表的每条记录都可以有不同的类型和结构**
主流软件
- **Redis**
- **MongoDB**
- **Memcached**
Redis简介

- Redis(Remote Dictionary Server)
- Redis是一个开源的使用C语言编,基于内存亦可持久化的key-value数据库,并且提供多种语言的API
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供了list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份(主从模式)
- 中文网站:www.redis.cn
部署Redis服务
源码安装Redis软件包
安装Reida依赖包:yum -y install gcc
• [root@master redis]# tar -xf redis-4.0.8.tar.gz //解压源码包
• [root@master redis-4.0.8]# make //编译
• [root@master redis-4.0.8]# make install //安装
• [root@master redis-4.0.8]# ls
进入utils目录
• [root@master redis-4.0.8]# cd utils/
• [root@master utils]# ls

- 解释:install_server.sh 初始化脚本
执行脚本
[root@master utils]# ./install_server.sh
Please select the redis port for this instance: [6379] //服务的默认端口号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@master utils]# ss -anptul | grep 6379
tcp LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=11482,fd=6))
查看服务状态
[root@master utils]# /etc/init.d/redis_6379 status
Redis is running (11445) //运行状态(服务运行时会显示pid号)
停止服务
[root@master utils]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
查看服务状态
[root@master utils]# /etc/init.d/redis_6379 status
cat: /var/run/redis_6379.pid: 没有那个文件或目录
Redis is running () //服务停止没有pid号
启动服务
[root@master utils]# /etc/init.d/redis_6379 start
Starting Redis server...
本机访问数据库服务
[root@master utils]# redis-cli //自己访问自己不需要输入用户名和密码就可以直接访问
127.0.0.1:6379> ping //输入ping验证是否可以存储数据
PONG //返回值PONG代表可以存储数据
127.0.0.1:6379> set name xxoo //set 存储
127.0.0.1:6379> get name //get 获取
"xxoo"
退出数据库
127.0.0.1:6379> exit
常用操作指令
- **set keyname keyvalue //存储**
- **get keyname //获取**
- **select 数据库编号0-15 //切换库**
- **keys * //打印当前库所有变量**
- **del keyname //删除指定变量**
- **flushall //删除所有库变量**
- **save //保存所有变量**
- **ttl keyname //查看变量生存周期**
- **Expire keyname 秒 //设置变量有效时间 **
- **EXISTS keyname //测试变量是否存在**
- **type keyname //查看类型**
- **move keyname dbname //移动变量**
- **shotdown //关闭redis服务**
部署LNMP+Redis
步骤一:
1)搭建lnmp环境
安装nginx依赖包
[root@master nginx-1.12.2]# yum -y install gcc pcre-devel openssl-devel
安装php和php-fpm软件包(可以使用阿里源安装)
[root@master ~]# yum -y install php php-fpm
启动php服务
[root@master ~]# systemctl start php-fpm
[root@master ~]# systemctl enable php-fpm
检测环境
[root@master nginx-1.12.2]# ./configure
编译&&安装
[root@master nginx-1.12.2]# make && make install
修改nginx配置文件连接php
[root@master ~]# vim /usr/local/nginx/conf/nginx.conf
启动nginx服务
[root@master ~]# /usr/local/nginx/sbin/nginx
编写php页面测试
[root@master ~]# vim /usr/local/nginx/html/test.php
<?php
$x="hello";
echo $x;
?>
访问测试
浏览器 : http://192.168.0.10/test.php
步骤二
1)配置php连接redis
安装依赖包
[root@master lnmp]# yum -y install php-devel
安装连接redis的功能模块
[root@master lnmp]# tar -xf php-redis-2.2.4.tar.gz0
[root@master lnmp]# ls
进入源码包
[root@master lnmp]# cd phpredis-2.2.4/
[root@master phpredis-2.2.4]# ls
生成脚本文件
[root@master phpredis-2.2.4]# phpize
检测环境并指定php程序文件路径
[root@master phpredis-2.2.4]# ./configure --with-php-config=/usr/bin/php-config
编译&&安装
[root@master phpredis-2.2.4]# make && make install
查看模块路径
[root@master phpredis-2.2.4]# ls /usr/lib64/php/modules/
修改php配置文件指定连接模块
[root@master ~]# vim /etc/php.ini

把728行注释去掉,配置项顶头,在双引号里边指定模块的路径
把730行注释去掉,配置项顶头,在双引号里边指定模块名字,把_dir删掉,这个只是用来指定模块名字的
修改后配置
重启php-fpm服务
[root@master ~]# systemctl restart php-fpm
过滤php支持redis模块
[root@master ~]# php -m | grep redis
redis
编写php连接redis脚本
[root@master ~]# vim /usr/local/nginx/html/redis_test.php
<?php
$redis = new redis(); //定义一个类
$redis->connect('127.0.0.1',6379); //连接本机的6379端口
$redis->set('name','xxoo'); //set存:name为变量名 xxoo为变量值
echo $redis->get('name'); //输出name变量里的值
?>
用浏览器访问脚本
http://192.168.0.10/redis_test.php
连接数据库查看
[root@master ~]# redis-cli
127.0.0.1:6379> get name //查看name 变量的值
"xxoo" //数据已存储到redis数据库内
redis配置文件解析
[root@master ~]# vim /etc/redis/6379.conf
- **.. ..**
- **# 1k => 1000 bytes**
- **# 1kb => 1024 bytes**
- **# 1m => 1000000 bytes**
- **# 1mb => 1024*1024 bytes**
- **# 1g => 1000000000 bytes**
- **# 1gb => 1024*1024*1024 bytes**
- **解释:rdis存储数据的计量单位**
- **bind 127.0.0.1 //指定 redis 只接收来自于该IP地址的请求**
- **port 6379 //redis默认监听的端口**
- **timeout 0 //客户端连接redis超时时间,为0则服务端不会主动断开连接**
- **tcp-keepalive 300 //检测redis服务的频率**
- **daemonize yes //rdis运行方式,yes为后台运行;no为不是后台运行**
- **logfile /var/log/redis_6379.log //redis服务日志文件 **
- **databases 16 //数据库的数量,默认为16个库;0~15,默认使用的库号为0**
- **dbfilename dump.rdb //数据库文件**
- **dir /var/lib/redis/6379 //数据库目录**
- **# maxclients 10000 //并发连接数**
- **# maxmemory-policy noeviction //定义内存策略,默认为noeviction(永不清除)**
- **#volatile-lru //利用lru算法清除被设置了过期的key**
- **# allkeys-lru //利用lru算法删除最少使用的key**
- **# volatile-random //随机删除被设置了过期的key**
- **# allkeys-random //随机移除任何key**
- **# volatile-ttl //移除即将过期的key,根据最近过期时间来删除**
- **# noeviction //不做任何操作(永不删除),默认策略**
- **# maxmemory <bytes> //最大使用内存**
设置Redis连接密码
[root@redis-ser1 ~]# vim /etc/redis/6379.conf
.. ..
requirepass 1234 //指定reids密码
重启redis服务
[root@master ~]# /etc/init.d/redis_6379 stop
[root@master ~]# /etc/init.d/redis_6379 start
连接数据库
[root@master ~]# redis-cli
127.0.0.1:6379> ping //测试
(error) NOAUTH Authentication required. //提示需要身份认证
127.0.0.1:6379> auth 1234 //auth关键字
OK
也可以在连接的时候直接输入密码
[root@master ~]# redis-cli -a 1234
127.0.0.1:6379> ping
PONG
注意:当修改密码后,再次通过脚本关闭redis服务失败,需要修改启动脚本文件
修改启动脚本添加密码
[root@master ~]# vim /etc/init.d/redis_6379
测试停止使用脚本停止redis服务
[root@master ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
启动服务
[root@master ~]# /etc/init.d/redis_6379 start
Starting Redis server...
连接数据库
[root@master ~]# redis-cli -a 1234
127.0.0.1:6379> ping
PONG
搭建Redis集群
安装依赖包(所有主机安装redis服务)
[root@redis-ser2 redis]# yum -y install gcc
进入源码包
[root@redis-ser2 utils]# cd redis-4.0.8
编译
[root@redis-ser2 utils]# make
安装
[root@redis-ser2 utils]# make install
进入utils目录
[root@redis-ser2 utils]# cd utils/
执行初始化脚本
[root@redis-ser2 utils]# ./install_server.sh (一路回车)
过滤进程
[root@redis-ser2 utils]# ss -anptul | grep redis
访问数据库
[root@redis-ser2 utils]# redis-cli
127.0.0.1:6379> ping
PONG
修改配置文件开机redis集群功能
[root@redis-ser1 ~]# vim /etc/redis/6379.conf
.. ..
bind 192.168.0.10 //指定本机IP
cluster-enabled yes //开启集群功能,默认为注释去掉注释
cluster-config-file nodes-6379.conf //集群信息文件,默认为注释,去掉注释
cluster-node-timeout 5000 //集群通信超时时间,默认为注释,去掉注释
重启redis服务
[root@redis-ser1 ~]# /etc/init.d/redis_6379 stop
[root@redis-ser1 ~]# /etc/init.d/redis_6379 start
查看redis端口
[root@redis-ser1 ~]# ss -anptul | grep redis
修改redis配置文件开启集群功能
[root@redis-ser1 ~]# vim /etc/redis/6379.conf
70
815
823
829
指定使用本机IP接收请求
开启集群功能
开启集群信息文件
自定集群之间通信超时时间
重新启服务
[root@redis-ser1 ~]# /etc/init.d/redis_6379 stop
[root@redis-ser1 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
查看服务状态
[root@redis-ser1 ~]# ss -anptul | grep redis
使用redis脚本管理集群
进入源码包
[root@redis-ser1 src]# cd redis-4.0.8
[root@redis-ser1 redis-4.0.8]# ls
进入src目录
[root@redis-ser1 src]# cd src/
[root@redis-ser1 src]# ls
redis-trib.rb //管理集群脚本
拷贝脚本到PATH路径
[root@redis-ser1 src]# cp redis-trib.rb /sbin
安装ruby环境
ruby rubygems ruby-devel redis-3.2.1.gem
安装软件包(可使用阿里源安装下边三个软件包)
[root@redis-ser1 redis]# yum -y install ruby rubygems ruby-devel
安装gem包
[root@redis-ser1 redis-cluster]# gem install redis-3.2.1.gem
创键集群
使用脚本创键集群(创键集群的时候一定要保证每台数据库都是空的,不然创键失败)
[root@redis-ser1 redis]# redis-trib.rb create \ //指定集群内的主机与端口
> 192.168.0.10:6379 \
> 192.168.0.20:6379 \
> 192.168.0.30:6379 \
客户端测试集群
传输软件包
[root@redis-ser1 redis]# scp -r redis-4.0.8.tar.gz root@192.168.0.100:/root/
客户端安装软件包
[root@host100 ~]# tar -xf redis-4.0.8.tar.gz
安装依赖包
[root@host100 utils]# yum -y install gcc
编译安装
[root@host100 utils]# make && make install
[root@host100 utils]# ls
进入utils目录
[root@host100 utils]# cd utils/
[root@host100 utils]# ls
执行安装脚本(一路回车)
[root@host100 utils]# ./install_server.sh
访问集群【-c访问集群 -h 指定集群机器的IP -p 指定端口】
[root@host100 ~]# redis-cli -c -h 192.168.0.10 -p 6379
192.168.0.10:6379> keys * //查看数据
(empty list or set)
192.168.0.10:6379> set name xxoo //存储数据
-> Redirected to slot [5798] located at 192.168.0.20:6379
192.168.0.20:6379> get name //获取数据
"xxoo"
关闭集群
修改配置文件
[root@redis-ser1 redis]# vim /etc/redis/6379.conf
815
823
829
删除集群文件
[root@redis-ser1 ~]# rm -rf /var/lib/redis/6379/nodes-6379.conf
重启redis服务
[root@redis-ser1 ~]# redis-cli -h 192.168.0.10 shutdown
[root@redis-ser1 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
过滤端口信息
[root@redis-ser1 ~]# ss -anptul | grep redis

解释:该路径存放php连接redis的模块
解释:集群开启后会在开启一个端口
解释:开启集群后会多出一个集群通讯端口
