NoSQL(Not Only SQL)

  1. - **不仅仅是SQL**
  2. - **泛指非关系型数据库**
  3. - **不需要预先定义数据存储结构**
  4. - **表的每条记录都可以有不同的类型和结构**

主流软件

  - **Redis**
  - **MongoDB**
  - **Memcached**

Redis简介

image.png

  • 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

image.png

进入utils目录

• [root@master redis-4.0.8]# cd utils/
• [root@master utils]# ls

image.png

  • 解释: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

image.png

启动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

image.png

进入源码包

[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

image.png解释:该路径存放php连接redis的模块

查看模块路径

[root@master phpredis-2.2.4]# ls /usr/lib64/php/modules/

image.png

修改php配置文件指定连接模块

[root@master ~]# vim /etc/php.ini

image.png
把728行注释去掉,配置项顶头,在双引号里边指定模块的路径
把730行注释去掉,配置项顶头,在双引号里边指定模块名字,把_dir删掉,这个只是用来指定模块名字的
修改后配置
image.png

重启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

image.png

测试停止使用脚本停止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

image.png解释:集群开启后会在开启一个端口

修改redis配置文件开启集群功能

[root@redis-ser1 ~]# vim /etc/redis/6379.conf
  70
  815
  823
  829

指定使用本机IP接收请求image.png

开启集群功能image.png

开启集群信息文件image.png

自定集群之间通信超时时间image.png

重新启服务

[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

image.png解释:开启集群后会多出一个集群通讯端口
__

使用redis脚本管理集群

进入源码包

[root@redis-ser1 src]# cd redis-4.0.8
[root@redis-ser1 redis-4.0.8]# ls

image.png

进入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 \

image.png

客户端测试集群

传输软件包

[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

image.png

删除集群文件

[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

image.png