一,软件准备

#redis
wget http://download.redis.io/releases/redis-3.0.7.tar.gz #phpredis 非php7使用 下载后文件名为:phpredis-develop
wget https://codeload.github.com/phpredis/phpredis/zip/develop #phpredis PHP7专属 下载后文件名为:phpredis-php7
wget https://codeload.github.com/phpredis/phpredis/zip/php7

安装phpredis前,务必已经安装好autoconf。

附:如果你有window(必须64位)安装redis服务需求,或者wamp仅仅需要redis扩展。可以到点链接下载redis64php_redis.dll

二,安装配置Redis

安装方法非常简单,make后,redis直接安装在当前目录:

tar xzf redis-3.0..tar.gz
cd redis-3.0.
make

开启redis前台服务测试:

src/redis-server

显示这个小盒子,前台服务即为成功开启,占用端口6379:

                _._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.0. (/) bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port:
| `-._ `._ / _.-' | PID: 23909
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

按Ctrl+C退出redis前台服务。

配置redis使用环境:

现在,我们新建目录 /usr/local/redis ,把./redis.conf,src/redis-server,src/redis-cli 三个文件复制到该目录下

mkdir /usr/local/redis
cp redis.conf src/redis-server src/redis-cli /usr/local/redis/
cd /usr/local/redis

这三个文件:

redis.conf redis配置文件

redis-server redis服务端

redis-cli redis客户端

vi redis.conf修改配置,使redis服务在后台运行:

#redis.conf#
daemonize yes

保存退出,./redis-server redis.conf 开启redis后台服务。

开启密码登入:

vi redis.conf修改配置

masterauth redis_password

重启redis-server后登入redis-cli客户端,输入auth redis_password 方可登入管理。

如果你修改redis.conf中的任何配置,需要关闭redis-server进程后,再./redis-server redis.conf 重新开启redis后台服务。

./redis-cli 开启redis客户端,你可以在其中输入任意redis命令。*注意,如果你在redis.conf配置文件中设置了requirepass 密码,那么登录客户端后,输入auth 密码 才可以继续操作。

#redis-cli接收参数,不填写参数默认连接127.0.0.1:6379
./redis-cli -h <host> -p <port>

Redis数据库

存入redis数据前必须选择数据库,redis数据库默认16个,下标0~15,默认使用第0个,存放数据前可以使用select N选择数据库。

Redis数据库在redis.conf中配置如下:

#redis.conf#
databases

你可以根据实际需要更改数据库个数,但一般不建议修改。

*持久化功能

redis(nosql产品)为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。

数据保存到硬盘的过程就称为“持久化”效果。

Redis快照持久化(snap shotting或称RDB持久化)配置:

该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行该持久化操作。快照持久化会根据配置条件定期生成二进制备份文件,默认文件名dump.rdb。

redis.conf 中关于快照的配置:

#快照写入文件名
dbfilename dump.rdb #快照保存目录
dir ./ #快照写入频率
save 1   #900 秒内如果超过 1 个 key 被修改,则发起快照保存
save 10  #300秒超过10个key被修改,发起快照
save 10000 #60秒超过10000个key被修改,发起快照
#以上三个备份频率需要同时存在:
#数据变化非常快的时候,就快点做备份(保证数据安全)
#数据变化慢的时候,就慢点做备份(节省服务器资源)

手动发起快照持久化:

快照持久化默认开启,并定时执行,你也可以通过redis-cli客户端使用bgsave命令手动发起。

./redis-cli bgsave

Redis AOF(append only file)持久化配置:

本质:把用户执行的每个“写”指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。

AOF默认关闭,默认保存文件名append.aof,默认每秒执行一次,具体参数如下

#开启/关闭AOF
appendonly yes #保存文件名
appendfilename "appendonly.aof" #AOF保存频率
# appendfsync always #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no #完全依赖 os,性能最好,持久化没保证
#上面三种选项数据安全性及服务性能情况
#数据最安全 服务器性能低
#数据较安全 服务器性能中等
#数据不安全 服务器性能高(优良)

AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作,在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理。

为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite:

#redis.conf#
no-appendfsync-on-rewrite yes

为AOF备份文件做优化压缩处理:

AOF记录用户的每个操作,但是有些操作例如对某个key的多个同类型操作是可以合并为一个,从而做到压缩文件大小的效果。例如多次incr一个整型key,可以直接合并为set key N。

压缩优化(AOF重写)命令:

./redis-cli bgrewriteaof

AOF自动重写:

当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写,它是这样工作的:Redis会记住上次进行些日志后文件的大小(如果从开机以来还没进行过重写,那日子大小在开机的时候确定)基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动,同时需要指定一个最小大小用于AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写AOF文件的情况,设置 percentage 为0就关闭这个重写特性。

#redis.conf#
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb

手动持久化相关指令:

save (客户端命令行内)前台备份数据(快照保存)
bgsave 异步保存数据到磁盘(快照保存)
lastsave 返回上次成功保存到磁盘的unix时间戳
shutdown 同步保存到服务器并关闭redis服务器
bgrewriteaof 当日志文件过长时优化AOF日志文件存储
redis 127.0.0.1:6379> SAVE #前台备份数据
./redis-cli  bgrewriteaof
./redis-cli bgsave
./redis-cli -h 127.0.0.1 -p bgsave #手动发起快照

数据恢复

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 快照保存目录 并启动服务即可。要查看快照保存目录,可以查看redis.conf的dir配置。

*Redis主从模式

为了降低每个redis服务器的负载,可以多设置几个,并做主从模式,一个服务器负载“写”(添加、修改、删除)数据,其他服务器负载“读”数据,主服务器数据会“自动”同步给从服务器

Redis主从复制特点

1.master可以有多个slave

2.除了多个slave连接到master外,slave也可以连接到其他slave,形成网状结构

3.可以让slave做读请求,master做写操作 

 

配置主服务器:

(假定局域网IP为192.168.1.101)

#redis.conf#

#配置主服务器密码
requirepass admin123 #自定义端口
port

配置从服务器:

#redis.conf#

#主服务器连接密码
masterauth admin123 #自定义端口
port 6379
#设置成为192.168.1.101的从服务器
slaveof 192.168.1.101 #取消从服务器只读
slave-read-only no

开启访问端口(主从都需要开启):

#开放6379端口
firewall-cmd --zone=public --add-port=/tcp --permanent
#重启防火墙
firewall-cmd --reload

重新开启redis-server 服务,则从服务器设置成功。

关于redis.conf 配置文件中bind和protected-mode的配置问题:

网上很多资料关于bind配置的描述都是‘指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中最好设置该项’,其实是一个错误的翻译说法。如果按照这个说法去配置,百分百是connection refuse。

*这里bind指的是interface,网络接口,也就是服务器上的网卡,一个服务器可以有一或多个网卡,设置这个bind是让这台服务器某一或多个网卡来接收请求,如果让本机所有网卡都接收请求,则bind可以直接注释掉。

*Redis protected-mode 是3. 之后加入的新特性, 是为了禁止公网访问redis cache,加强redis安全的。它启用的条件,有两个:
) 没有bind IP
) 没有设置访问密码
如果启用了,则只能够通过lookback(回路) ip(127.0.0.1)访问Redis cache,如果从外网访问,则会返回错误信息。 因此如果没有设置bind,则protected-mode设置为no,且开放6379访问端口。

Redis推荐部署方式:

在一台服务器上部署多个Redis服务节点(启动多端口,运行多实例)方式:

假设你只有一台电脑,但又想实现redis的主从部署,你考虑使用诸如6380,6381...等端口创建从节点,那么问题来了,改怎么设置呢?

如果要在一台服务器上运行多个redis实例,必须满足以下3点:

  1. 使用不同的端口
  2. 分别配置每个实例(服务)的pid和log文件
  3. RDB和AOF持久化到每个实例(服务)的rdb和aof文件中

每个实例必须对应一个配置文件,配置文件按照上面3点设置:

cp redis.conf redis_6380.conf
vi redis_6380.conf
port #设置端口
pidfile /var/run/redis/redis_6380.pid #设置pid文件
logfile /var/log/redis/redis_6380.log #设置log文件
dbfilename dump_6380.rdb #设置RDB持久化文件
appendfilename "appendonly_6380.aof" #设置aof持久化文件

其他配置文件按此修改,至于从节点配置,回上面看。

启动多个redis实例:

./redis-server redis_6380.conf
./redis-server redis_6381.conf

配置好从节点后,./redis-cli 开启客户端,auth 密码 登入,再输入info命令,可以查看redis主节点状态,其中该主节点的从节点信息如下:

# Replication
role:master
connected_slaves:
slave0:ip=127.0.0.1,port=,state=online,offset=,lag=
slave1:ip=127.0.0.1,port=,state=online,offset=,lag=
master_repl_offset:
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:

*Redis哨兵模式

Sentinel哨兵模式是在主从模式架构上,增加对redis服务的监控,如果主服务器宕机,可以将从服务器切换为主服务,提高了redis服务的可用性。

哨兵的作用: 
1、监控redis进行状态,包括master和slave 
2、当master 宕机机,能自动将slave切换成master

单个哨兵(图片来源:http://blog.csdn.net/yingxiake/article/details/51671335)

多个哨兵(图片来源:http://blog.csdn.net/yingxiake/article/details/51671335)

具体配置:(主192.168.1.109,从192.168.1.111)

1,复制redis安装包中的sentinel.conf和src/redis-sentinel文件到/usr/local/redis/下。

2,配置sentinel.conf,这里每台redis服务器都设置一个哨兵,主从哨兵都使用同样的配置

####下面2个配置要与redis.conf的配置同步,否则会出错##
#bind x.x.x.x
#protected-mode yes|no #开启后台运行,如果开启运行,将看不到sentinel前台运行时状态实时信息
daemonize yes #配置主服务sentinel monitor 主服务名(自定义) 服务ip 服务端口 当有n个哨兵认为主服务宕机,才能启动切换主从服务。因为我只有2台服务器,因此此处设置为1
sentinel monitor mymaster 192.168.1.109 #主服务密码
sentinel auth-pass mymaster redis_password #间隔多少毫秒检查主服务器宕机,这里写5秒
sentinel down-after-milliseconds mymaster #失效超时
#sentinel failover-timeout mymaster 90000

3,哨兵默认占用26379端口,需开放:

#开放26379端口
firewall-cmd --zone=public --add-port=26379/tcp --permanent
#重启防火墙
firewall-cmd --reload

4,在已开启主从服务器情况下,启用哨兵服务:

./redis-sentinel sentinel.conf --sentinel

在前台模式运行下,会显示如下:

./redis-sentinel sentinel.conf --sentinel
16123:X 24 Jun 10:53:35.288 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.9 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 16123
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' 16123:X 24 Jun 10:53:35.292 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
16123:X 24 Jun 10:53:35.292 # Sentinel ID is 594f00cb60e77a52a47d9b3c520dd3f28c0b3d25
16123:X 24 Jun 10:53:35.292 # +monitor master mymaster 192.168.1.109 6379 quorum 1
16123:X 24 Jun 10:55:36.542 # +sdown sentinel ec86fc3abde024f5297131822d415abd09543c46 192.168.1.109 26379 @ mymaster 192.168.1.109 6379
16123:X 24 Jun 10:55:45.171 # -sdown sentinel ec86fc3abde024f5297131822d415abd09543c46 192.168.1.109 26379

kill掉主服务器,显示如下信息

16123:X 24 Jun 10:56:15.641 # +failover-state-reconf-slaves master mymaster 192.168.1.109 6379
16123:X 24 Jun 10:56:15.702 # +failover-end master mymaster 192.168.1.109 6379
16123:X 24 Jun 10:56:15.703 # +switch-master mymaster 192.168.1.109 6379 192.168.1.111 6379
16123:X 24 Jun 10:56:15.703 * +slave slave 192.168.1.109:6379 192.168.1.109 6379 @ mymaster 192.168.1.111 6379

说明主服务已经切换到从服务。

*关于Redis详细配置信息,可以参考以下博客:

1Redis配置文件详解 2Redis配置文件详解

三,安装PHP扩展

方式1. 生成redis.so:

unzip phpredis-Version

cd phpredis-Version

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

将extension=redis.so加入到php.ini

重启服务器,查看phpinfo();

如果是使用php-fpm,则需要重启php-fpm:

ps aux|grep php-fpm #查看fpm进程号

kill -USR2 fpm进程号 #平滑重启php-fpm

方式2.Yum安装:

首先查看php版本信息 php -v

显示如:

PHP 7.0.32 (cli) (built: Sep 15 2018 07:54:46) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

则可以通过:

yum list | grep php70w*

来搜索php-redis扩展列表。

选择并安装:

yum -y install php70w-pecl-redis.x86_64

流程自动走完即可。

phpinfo():

显示即OK。

四,测试使用

新建test_redis.php

 <?php

 //连接本地Redis服务
$redis=new Redis();
$redis->connect('localhost','6379'); //$redis->auth('admin123');//如果设置了密码,添加此行
//查看服务是否运行
$redis->ping(); //选择数据库
$redis->select(5); //设置数据
$redis->set('school','WuRuan');
//设置多个数据
$redis->mset(array('name'=>'jack','age'=>24,'height'=>'1.78')); //存储数据到列表中
$redis->lpush("tutorial-list", "Redis");
$redis->lpush("tutorial-list", "Mongodb");
$redis->lpush("tutorial-list", "Mysql"); //获取存储数据并输出
echo $redis->get('school'); echo '<br/>'; $gets=$redis->mget(array('name','age','height'));
print_r($gets); $tl=$redis->lrange("tutorial-list", 0 ,5);
print_r($tl);

显示:

*语法参考文档,phpredis中文手册

五(附),Redis性能测试及常用命令

Redis性能测试

Redis还自带一个redis-benchmark性能测试工具,我们将其复制到/usr/local/redis目录下

cp /usr/local/src/redis-3.0./src/redis-benchmark /usr/local/redis/

redis-benchmark操作命令如下:

redis-benchmark [option] [option value]

redis 性能测试工具可选参数如下所示:

实例

1,我们同时执行10000个请求来检测redis性能:

./redis-benchmark -n
====== PING_INLINE ======
requests completed in 0.31 seconds
parallel clients
bytes payload
keep alive: 74.11% <= milliseconds
95.93% <= milliseconds
98.82% <= milliseconds
99.30% <= milliseconds
99.33% <= milliseconds
99.40% <= milliseconds
99.45% <= milliseconds
99.51% <= milliseconds
99.60% <= milliseconds
99.64% <= milliseconds
99.82% <= milliseconds
100.00% <= milliseconds
31746.03 requests per secon
....更多显示参数不列举

2,使用了多个参数来测试 redis 性能:

#以下实例中主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。
./redis-benchmark -h 127.0.0.1 -p -t set,lpush -n -q
SET: 38314.18 requests per second
LPUSH: 36363.64 requests per second

Redis常用命令

到这个博客看看redis命令http://blog.csdn.net/yhl27/article/details/9936189

*下面图片出自传播智客

*Redis教程:http://www.runoob.com/redis/redis-tutorial.htmlhttp://www.jb51.net/article/56448.htm

Redis推荐部署方式:

Linux下Redis安装与PHP扩展(PHP7适用)的更多相关文章

  1. windows下和linux下 Redis 安装

    Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...

  2. Redis(二)linux下redis安装

    上篇讲解了redis在windows下的安装,接下来看看在linux下如何安装redis(纯菜鸟入门级别)? (1)redis的下载及编译 这里,首先进入存放文件目录(我的云服务器的是:cd /jel ...

  3. Linux下Redis安装使用,主从模式,哨兵模式与PHP扩展(PHP7适用)

    一,软件准备 #redis wget http://download.redis.io/releases/redis-3.0.7.tar.gz #phpredis 非php7使用 下载后文件名为:ph ...

  4. Linux下redis安装与使用

         redis官网地址:http://www.redis.io/      最新版本:2.8.3      在Linux下安装Redis非常简单,具体步骤如下(官网有说明):      1.下载 ...

  5. Linux下redis安装与使用 (转)

    尊重原创:https://www.cnblogs.com/codersay/p/4301677.html,并更正如下红字 redis官网地址:http://www.redis.io/ 最新版本:2.8 ...

  6. 【Redis】Linux下Redis安装与redis-desktop-manager使用(无法连接Redis服务器解决方法)

    新手小白开始学习nosql数据库Redis,首先从安装入手. 全文分两部分:Linux下安装redis,可视化工具redis desktop manager的简单使用. 一.安装 下载,解压缩和编译R ...

  7. linux下redis安装运行教程——redis系列

    天没降大任于我,照样苦我心智,劳我筋骨. 安装运行的过程 由于官网太慢,csdn里的资源又要钱,所以呢,只能使用我自己本地以前下载的陈年..哦不,3.xredis安装包 资源已经放到百度云,需要的可以 ...

  8. Linux下redis安装(单机版)

    redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了 memcached的不足,它支持存储的value类型相对更多,包括stri ...

  9. 如何在Linux下Redis安装

    转载出于:http://blog.csdn.net/jiangguilong2000/article/details/8114740 redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比 ...

随机推荐

  1. 僵尸进程的产生和避免,如何kill杀掉linux系统中的僵尸defunct进程

    在 Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的"僵尸"进程."僵尸"进程是一个早已 死亡的进程 ...

  2. 彩色照片转换为黑白照片(Color image converted to black and white picture)

    This blog will be talking about the color image converted to black and white picture. The project st ...

  3. Linux下目标文件分析

    文章来源:华清远见嵌入式学院,原文地址:http://www.embedu.org/Column/Column699.htm 作者:冯老师,华清远见嵌入式学院讲师. 1. 程序源码如下: 2.命令 g ...

  4. IntelliSense: namespace "osgDB" 没有成员 "BEGIN_BRACKET"

    IntelliSense: namespace "osgDB" 没有成员 "BEGIN_BRACKET" 转自:http://bbs.osgchina.org/ ...

  5. Spring MVC和Struts2的比较(二)

    1.Spring MVC的controller+command object模式比Struts2的Action模式更安全一些.而在Struts2中,自动数据绑定发生在Action对象上.这样,在Act ...

  6. Maven3路程(一)用Maven创建第一个web项目(2)

    工具/原料 Windows 系统 JDK 1.5 及以上版本 Maven 3.0 及以上版本 方法/步骤 1 首先检查Eclipse是否已经添加的Maven插件,打开Eclipse, 依次选择 &qu ...

  7. java.util.HashMap

    做LeeCode上的题目,发现关于数组的题目用HashMap后简化运算,包括在之前的工作中,也多次用到HashMap而我对它的了解却不多,现在来总结一下. 在算法中的用处,暂时的理解是,当数组中两个数 ...

  8. HDU1224 DP

    Free DIY Tour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. iOS Core Animation

    1.什么是Core Animation? 它是一套包含图形绘制,投影,动画的OC类集合.它就是一个framework.通过CoreAnimation提供的接口,你可以方便完成自己所想要的动画. 2.我 ...

  10. Rocky4.2下安装金仓v7数据库(KingbaseES)

    1.准备操作系统 1.1 系统登录界面 1.2 操作系统版本信息 jdbh:~ # uname -ra Linux jdbh -x86_64 # SMP Fri Dec :: CST x86_64 G ...