目录
一、关系型数据库与非关系型数据库
二、Redis安装
三、Redis服务常用运行参数
四、Redis+LNMP
1.关系型数据库 RDBMS
RDBMS即关系数据库管理系统(Relational Database Management System),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的数据库软件有Oracle、SQL Server等
关系型数据库安装默认定义的组织结构,将数据存储到物理介质上.如我们熟知的建库建表操作,就是为了创建这种组织结构
数据之间可以做关联操作,如通过外建建立的表间关系,做级联操作等
RDBMS主流软件:Mysql,Oracle,DB2,Sql Server,Mariadb
2.非关系型数据库 NoSql
NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系型数据库,它们不保证关系数据的ACID特性。NoSQL是一项全新的数据库革命性运动,其拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单.
非关系型数据库不需要提前定义数据存储结构,每条记录的数据格式都可以是任意的,可以有不同的数据类型和字端个数,常采用键值对的存储形式(key-value).
NoSql主流软件:Redis,Memcached,MongoDB,CouchDB,Neo4j,FlockDB
1.概述
Redis(Remote Dictionary Server)是一个key-value存储系统,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型).
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器.redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis官网:https://redis.io/
2.Redis安装
这里讲解在Linux上安装Redis服务,[Redis下载地址]http://download.redis.io/releases/redis-4.0.14.tar.gz
- [root@redis1 redis]# yum -y install gcc
- [root@redis1 redis]# wget http://download.redis.io/releases/redis-4.0.14.tar.gz
- [root@redis1 redis]# tar -zxf redis-4.0.8.tar.gz
- [root@redis1 redis]# cd redis-4.0.8/
- [root@redis1 redis-4.0.8]# make
- [root@redis1 redis-4.0.8]# make install
- [root@redis1 redis-4.0.8]# cd utils/
- [root@redis1 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! //提示安装成功
Redis初始化配置文件信息
- 端口号:6379
- 主配置文件:/etc/redis/6379.conf
- 日志文件:/var/log/redis_6379.conf
- 数据库目录:/var/lib/redis/6379
- 服务启动程序:/usr/local/bin/redis-server
- 命令行连接命令:/usr/local/bin/redis-cli
3.运行Redis
使用/etc/init.d/redis_6379 脚本运行redis,支持的参数有start ,stop, status(查看状态)
- [root@redis1 utils]# /etc/init.d/redis_6379 start
- Starting Redis server...
- [root@redis1 utils]# redis-cli //默认连接127.0.0.1地址的 6379端口
- 127.0.0.1:6379> ping
- PONG //PONG说明服务正常
4.查看监听的端口与运行状态
- [root@redis1 utils]# netstat -antupl |grep :6379 //查看端口
- tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 15203/redis-server
- [root@redis1 utils]# ps -C redis-server //查看进程
- PID TTY TIME CMD
- 15203 ? 00:00:00 redis-server
- [root@redis1 utils]# /etc/init.d/redis_6379 status //查看运行状态
- Redis is running (15203)
5.Redis常用命令
- 存储一个key:set key(键) value (值)
- 存储多个key:mset key1 value1 key2 value2 .... keyn valuen
- 获取key值: get key
- 获取多个key值:get key1 key2 ... keyn
- 切换库:select 库编号(0-15)
- 显示所有key:keys *
- 模糊匹配key:keys a*(显示以a开头的键值)
- 模糊匹配key2:key a?(显示以a开头,且只有两位的键值,如ab)
- 判断key是否存在:exists key
- 查看key的生存时间:ttl key
- 查看key的类型:type key
- 移动key到指定库:move key 库名
- 设置key的生存时间:expire key 时间(数字,秒)
- 删除指定key:del key名
- 删除内存里所有key:flushall
- 保存所有key到硬盘:save
- 停止服务:shutdown
1)命令set 、 mset 、 get 、 mget
具体操作如下
- 192.168.4.50:6350> set name bob //存储单个key值
- OK
- 192.168.4.50:6350> mset age 19 sex boy //存储多个key值
- OK
- 192.168.4.50:6350> get name //获取单个变量
- "bob"
- 192.168.4.50:6350> mget age sex //获取多个变量
- 1) "19"
- 2) "boy"
2)命令keys 、 type 、 exists 、 del
具体操作如下
- 192.168.4.50:6350> keys * //查看所有key
- 1) "sex"
- 2) "age"
- 3) "name"
- 192.168.4.50:6350> keys ??? //查看所有位数为3为位的数,一个?代表一位
- 1) "sex"
- 2) "age"
- 192.168.4.50:6350> keys a* //查看所有以a开头的数
- 1) "age"
- 192.168.4.50:6350> type age //查看数据类型,使用set命令存储的变量都是字符类型
- string
- 192.168.4.50:6350> del age //删除记录
- (integer) 1
- 192.168.4.50:6350> exists age //查看变量是否存在,变量不存储返回值0
- (integer) 0
- 192.168.4.50:6350> exists sex //变量存在 返回值1
- (integer) 1
3)命令ttl 、 expire 、 move 、 flushdb 、flushall 、save、shutdown、select
具体操作如下
- 192.168.4.50:6350> keys *
- 1) "sex"
- 2) "name"
- 192.168.4.50:6350> ttl sex //返回值-1 表示变量永不过期
- (integer) -1
- 192.168.4.50:6350> expire sex 20 //设置变量过期时间为 20 秒
- (integer) 1
- 192.168.4.50:6350> ttl sex //还剩14秒过期
- (integer) 14
- 192.168.4.50:6350> ttl sex //返回值-2 表示已经过期
- (integer) -2
- 192.168.4.50:6350> exists sex //变量已经不存在
- (integer) 0
- 192.168.4.50:6350> move name 1 //把变量name移动到1号库里,move的副作用就是创建一个库
- (integer) 1
- 192.168.4.50:6350> select 1 //切换到1号库
- OK
- 192.168.4.50:6350[1]> keys * //查看
- 1) "name"
- 192.168.4.50:6350[1]> select 0 //切换到0号库,因为没有0库
- OK
- 192.168.4.50:6350> keys * //查看
- (empty list or set)
- 192.168.4.50:6350>
- 192.168.4.50:6350> select 1 //切换到1号库,切换之后会有显示库名[1]
- OK
- 192.168.4.50:6350[1]> keys *
- 1) "name"
- 192.168.4.50:6350[1]> flushdb //清除表内所有数据
- OK
- 192.168.4.50:6350[1]> keys *
- (empty list or set)
- 192.168.4.50:6350[1]> save //保存结果,存到系统路径中
- OK
- 192.168.4.50:6350[1]> shutdown //中断连接,将关闭进程
- not connected> //提示连接断开
- not connected> exit //退出登录
- [root@host50 ~]# netstat -utnlp | grep redis-server //没有进程信息,退出后自动关闭进程,需要重启redis
redis主配置文件为/etc/redis/6379.conf,一共分为7个模块,以注释的形式分开,还是比较好区分
主要分为如下模块:
名称 | 说明 |
NETWORK | 网络 |
GENERAL | 常规 |
SNAPSHOTRING | 快照 |
REPLICATION | 复制 |
CLIENTS | 客户端 |
MEMORY MANAGEMENT | 内存管理 |
NETWORK模块截图如下
以下是Redis数据单位
以下是网络(NETWORK)和常规(GENERAL)模块常用的配置信息
- 端口:port 6379
- ip地址:bind 127.0.0.1
- 守护进程方式运行:daemonize yes
- 最大允许数据库个数:databases 16
- 日志文件:logfile /var/log/redis_6379.log
- 并发连接数量:maxclients 10000
- 数据库目录:dir /var/lib/redis/6379
以下是内容管理(MEMORY MANAGEMENT)常用到的配置信息
设置内存清除策略:
- 删除最近最少使用(针对设置了TTL的key):volatile-lru
- 删除最近最少使用的key(针对所有key):allkeys-lru
- 删除所有key中使用频率最少的key:allkeys-lfu
- 从所有配置了TTL的key中清除使用频率最少的key:volatile-lfu
- 在设置了TTL的key中随机删除:volatile-random
- 随机移除key:allkeys-random
- 移除最近过期的key:volatile-ttl
- 不删除,写满时报错,不予以存储:noeviction
优化设置:
最大内存:maxmemory
定义使用策略:maxmemory-policy
选取key模板的个数(针对lru和ttl策略):maxmemory-samples
1.修改端口号,ip地址与登录密码
redis默认端口端口是6379,以下我们将端口修改为6350,ip修改为本机ip,修改登录密码(默认被注释了)
- [root@host50 utils]# cp /etc/redis/6379.conf /root/6379.conf //可以先备份一份,防止修改错误没法还原
- [root@host50 utils]# /etc/init.d/redis_6379 stop //修改前关闭服务
- [root@host50 utils]# vim /etc/redis/6379.conf
- //为了快速找到定位,我们使用vim,进入后在命令模式按/键,输入bind,按字符n查找下一个
- ...
- bind 192.168.4.50 //设置服务使用的ip
- port 6350 //更改端口号
- requirepass 123456 //设置密码
- :wq
修改启动脚本
修改启动脚本的关闭redis一行
- [root@host50 ~]# vim +43 /etc/init.d/redis_6379
- $CLIEXEC -h 192.168.4.50 -p 6350 -a 123456 shutdown
- :wq
启动服务
启动服务并使用配置的ip,端口,密码登录
- [root@host50 ~]# /etc/init.d/redis_6379 start
- Starting Redis server...
- [root@host50 ~]# netstat -utnlp | grep redis-server
- tcp 0 0 192.168.4.50:6350 0.0.0.0:* LISTEN 11523/redis-server
- [root@host50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456 //访问服务
- 192.168.4.50:6350> ping
- PONG
Redis+LNMP是一组常用组合,这里Redis做缓存服务器,将数据存储到缓存服务器中,加快用户读取数据的速度
我们这里需要准备一台主机,在这台主机上安装Nginx,PHP和Redis服务,因为这里我们只测试Redis存储信息,不需要用到数据库服务,所有不安装数据库
1.部署LNMP服务
1)安装源码nginx软件及php-fpm
- ]#yum -y install gcc pcre-devel zlib-devel //安装依赖
- ]#tar -zxvf nginx-1.12.2.tar.gz //解压
- ]#cd nginx-1.12.2 //进源码目录
- ]#./configure //配置
- ]#make && make install //编译安装
- ]#yum -y install php-fpm //安装php-fpm
2)修改配置nginx.conf
打开php格式解析
- ] # vim +65 /usr/local/nginx/conf/nginx.conf
- location ~ \.php$ {
- root html;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- include fastcgi.conf;
- }
- :wq
- ]# /usr/local/nginx/sbin/nginx -t //测试修改
- nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
3)启动服务
启动php-fpm服务,nginx服务
- ]# systemctl start php-fpm //启动服务
- ]# netstat -utnlp | grep :9000 //查看端口
- ]# /usr/local/nginx/sbin/nginx
- ]# netstat -utnlp | grep :80
- tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 23505/nginx: master
2.配置PHP支持redis
1)安装php扩展
[扩展包下载地址]https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz
- [root@host71 ~]# yum -y install php php-devel automake autoconf //安装依赖
- ]# tar -zxf php-redis-2.2.4.tar.gz //安装扩展包
- ]# cd phpredis-2.2.4/
- ]# phpize //生成配置文件php-config及 configure命令
- Configuring for:
- PHP Api Version: 20100412
- Zend Module Api No: 20100525
- Zend Extension Api No: 220100525
- ]# ./configure --with-php-config=/usr/bin/php-config //配置
- ]# make //编译
- ]# make install //安装
2)修改php.ini文件
- ]#vim /etc/php.ini
- 728 extension_dir = "/usr/lib64/php/modules/" //模块文件目录
- 730 extension = "redis.so" //模块文件名
- :wq
- ]# systemctl restart php-fpm //重启php-fpm服务
- ]# php -m | grep -i redis //查看已加载的模块
- redis
3.测试配置:编写网站脚本,把数据存储到本地redis
1)查看192.168.4.50主机的redis服务是否运行
- [root@host50 ~]# netstat -utnlp | grep redis-server
- tcp 0 0 192.168.4.50:6350 0.0.0.0:* LISTEN 11523/redis-server
- [root@host50 ~]#
- [root@host50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456 //访问服务
- 192.168.4.50:6350> ping
- PONG
- 192.168.4.50:6350> exit
2)编写网站脚本
- ]# vim /usr/local/nginx/html/linkredis.php
- $redis = new redis();
- $redis->connect("192.168.4.50","6350");
- $redis->auth("123456");
- $redis->set("linux","redhat");
- echo $redis->get("linux");
- ?>
- :wq
3)访问网站脚本
- ]#curl http://localhost/linkredis.php //访问nginx服务
- redhat
4)在192.168.4.50 服务器,查看数据
- [root@host50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456 //连接redis服务
- 192.168.4.50:6350> keys * //查看变量
- 1) "linux"
- 192.168.4.50:6350>
- 192.168.4.50:6350> get linux //获取值
- "redhat"
- 192.168.4.50:6350>