21.18 redis慢查询日志php
21.19 php安装redis扩展mysql
21.20 redis存储sessionlinux
21.21 redis主从配置git
21.18 redis慢查询日志github
1.编辑配置文件/etc/redis.confredis
2.针对慢查询日志,能够设置两个参数,一个是执行时长,单位是微秒,另外一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。sql
1000微妙=1毫秒apache
1000毫秒=1秒vim
日志的长度是好比这个日志的长度最多纪录1000条,当1001条被记录的时候,第1条会被移除centos
slowlog-log-slower-than 1000 //单位us(微妙),表示慢于1000ms则记录日志
slowlog-max-len 128 //定义日志长度,表示最多存128条
3.slowlog get //列出全部的慢查询日志
4.slowlog get 2 //只列出2条
5.slowlog len //查看慢查询日志条数
实例:
[root@axinlinux-01 ~]# vim /etc/redis.conf
slowlog-log-slower-than 10 #为方便实验,咱们改成10微妙。实验种咱们任何操做都是大于10微妙的
[root@axinlinux-01 ~]# killall redis-server #杀掉他重启
[root@axinlinux-01 ~]# redis-server /etc/redis.conf
[root@axinlinux-01 ~]# redis-cli -a 'aming>com' #咱们上一节设置了密码
127.0.0.1:6379> SLOWLOG get #咱们随便操做几个命令,而后查看慢查询日志
1) 1) (integer) 3 #这个3是第几个命令的意思
2) (integer) 1542118117
3) (integer) 17
4) 1) "get" #这个4)就是咱们执行的哪一个命令
2) "key3"
5) "127.0.0.1:52478"
6) ""
2) 1) (integer) 2
2) (integer) 1542118077
3) (integer) 31
4) 1) "SLOWLOG"
2) "get"
5) "127.0.0.1:52478"
6) ""
3) 1) (integer) 1
2) (integer) 1542118069
3) (integer) 12
4) 1) "SLOWLOG"
2) "log"
5) "127.0.0.1:52478"
6) ""
4) 1) (integer) 0
2) (integer) 1542118064
3) (integer) 1339
4) 1) "COMMAND"
5) "127.0.0.1:52478"
6) ""
127.0.0.1:6379> SLOWLOG get 1 #slowlog get 1,加个就是表明把最新的列出来。加2就是列出两条
1) 1) (integer) 4
2) (integer) 1542118124
3) (integer) 34
4) 1) "SLOWLOG"
2) "get"
5) "127.0.0.1:52478"
6) ""
127.0.0.1:6379> SLOWLOG len #查看慢查询日志条数
(integer) 6
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21.19 php安装redis扩展
实验使用的是lnmp环境。若是是lamp环境是同样的安装方法
以前讲过php安装memcached的扩展模块,那php也能够安装redis的扩展模块
1.cd /usr/local/src
2.wget https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip #为官方的
3.unzip phpredis.zip
4.cd phpredis-develop
5./usr/local/php-fpm/bin/phpize
6../configure --with-php-config=/usr/local/php-fpm/bin/php-config
7.make
8.make install
9.vim /usr/local/php.ini//增长extension=redis.so
10./usr/local/php-fpm/bin/php -m|grep redis//看是否有redis模块
11.重启php-fpm服务
实例:
[root@axinlinux-01 ~]# cd /usr/local/src/
[root@axinlinux-01 src]# wget https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip
[root@axinlinux-01 src]# unzip phpredis.zip
[root@axinlinux-01 src]# cd phpredis-develop/
[root@axinlinux-01 phpredis-develop]# /usr/local/php-fpm/bin/phpize #生成configure文件
[root@axinlinux-01 phpredis-develop]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
[root@axinlinux-01 phpredis-develop]# make
[root@axinlinux-01 phpredis-develop]# echo $?
0
[root@axinlinux-01 phpredis-develop]# make install
Installing shared extensions: /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
[root@axinlinux-01 phpredis-develop]# echo $?
0
[root@axinlinux-01 phpredis-develop]# vim /usr/local/php-fpm/etc/php.ini #编辑php.ini的文件
extension=memcache.so
extension=redis.so #在memcached的下面加上这一行
[root@axinlinux-01 phpredis-develop]# /usr/local/php-fpm/sbin/php-fpm -m
[root@axinlinux-01 phpredis-develop]# /etc/init.d/php-fpm restart #使他生效
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21.20 redis存储session
共三种方法
1. #跟memcached同样,第一种会有问题,因此不使用
vim /usr/local/php-fpm/etc/php.ini//更改或增长
session.save_handler = "redis"
session.save_path = "tcp://127.0.0.1:6379"
2.
或者apache虚拟主机配置文件中也能够这样配置:
php_value session.save_handler " redis" php_value session.save_path " tcp://127.0.0.1:6379"
3.
或者php-fpm配置文件对应的pool中增长: #本次实验咱们用这种方式(lnmp环境)
php_value[session.save_handler] = redis
php_value[session.save_path] = " tcp://127.0.0.1:6379 "
测试:
1.wgt http://study.lishiming.net/.mem_se.txt
2.mv .mem_se.txt /data/wwwroot/default/session.php
其中session.php内容能够参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php
3.curl localhost/session.php //结果相似于1443702394<br><br>1443702394<br><br>i44nunao0g3o7vf2su0hnc5440
4.命令行链接redis,也能够查看到该key以及对应的值
5.若是想用php链接redis cluster,须要使用predis扩展
redis cluster是他的集群架构,后面会讲到。连php的时候就不要选择这个php的模块了,而是选择这个predis。predis模块是针对集群的
安装方法相似phpredis,predis扩展地址https://github.com/nrk/predis
实例:
[root@axinlinux-01 ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
php_value[session.save_handler] = redis #直接在下面加入这两行便可。能够把以前的memcached注释掉。其实都是同样的配置,只不事后面的名字和IP端口不同
php_value[session.save_path] = " tcp://127.0.0.1:6379 "
[root@axinlinux-01 ~]# vim /etc/redis.conf #为方便测试,咱们先把以前的redis登陆密码取消掉
#requirepass aming>com #注释便可
[root@axinlinux-01 ~]# killall redis-server
[root@axinlinux-01 ~]# redis-server /etc/redis.conf
而后测试
由于咱们以前memcached的时候就已经下载过这个php的脚本了,因此咱们直接curl
[root@axinlinux-01 default]# curl localhost/index.php #能够多curl几回
1542121511<br><br>1542121511<br><br>2ptjn8tik3926kcged03im7ac7 #咱们能够看这些对面的key和value在redis里有没有生成
[root@axinlinux-01 default]# curl localhost/index.php
1542121513<br><br>1542121513<br><br>qb4ibjecn4ur91g1munle0jiu3
[root@axinlinux-01 default]# redis-cli #在进入redis,看是否跟咱们上面curl出来的key是同样的
127.0.0.1:6379> keys *
8) "PHPREDIS_SESSION:2ptjn8tik3926kcged03im7ac7"
4) "PHPREDIS_SESSION:qb4ibjecn4ur91g1munle0jiu3"
127.0.0.1:6379> get PHPREDIS_SESSION:2ptjn8tik3926kcged03im7ac7 #咱们选其中一个key,get一下,看是否能curl出来的value是一致的
"TEST|i:1542121511;TEST3|i:1542121511;"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21.21 redis主从配置
1.为了节省资源,咱们能够在一台机器上启动两个redis服务
cp /etc/redis.conf /etc/redis2.conf
vim /etc/redis2.conf //须要修改port,dir,pidfile,logfile
2.还要增长一行。就是他的主是谁。配置redis主从的时候,主基本不用动
slaveof 127.0.0.1 6379
若是主上设置了密码,还须要增长
masterauth aminglinux>com //设置主的密码
3.启动以前不要忘记建立新的dir目录
redis-server /etc/redis2.conf
测试:在主上建立新的key,在从上查看
注意:redis主从和mysql主从不同,redis主从不用事先同步数据,它会自动同步过去
实例:
[root@axinlinux-01 ~]# cp /etc/redis.conf /etc/redis2.conf
[root@axinlinux-01 ~]# vim /etc/redis2.conf
port 6380 #由于使用了同一台作主从,因此要在从的配置文件里修改这几个地方。与主区分开来
pidfile /var/run/redis_6380.pid
logfile "/var/log/redis2.log"
dir /data/redis2
如下为正常配置slave配置文件的
slaveof 127.0.0.1 6379 #正常配置redis主从的时候,要在slaveof相关的下面加入这一行
#正常的话要写主的ip。
#若是主使用了密码,要在# masterauth <master-password>这里写上master的密码
[root@axinlinux-01 ~]# mkdir /data/redis2 #建立slave的dir目录
[root@axinlinux-01 ~]# redis-server /etc/redis2.conf #开启
[root@axinlinux-01 ~]# ps aux |grep redis #查看服务
root 7144 0.1 0.5 147344 9772 ? Ssl 22:56 0:04 redis-server 127.0.0.1:6379
root 7710 0.2 0.5 147344 9692 ? Ssl 23:31 0:00 redis-server 127.0.0.1:6380
root 7725 0.0 0.0 112724 980 pts/0 S+ 23:32 0:00 grep --color=auto redis
[root@axinlinux-01 ~]# netstat -lntp #查看端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 7144/redis-server 1
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 7710/redis-server 1
[root@axinlinux-01 ~]# redis-cli -h 127.0.0.1 -p 6380 #由于主从都在一台机器上。因此要指定他的ip和端口登陆
127.0.0.1:6380> set key100 111 #咱们发如今slave里不能写,只能读。如下:
(error) READONLY You can't write against a read only slave.
[root@axinlinux-01 ~]# vim /etc/redis2.conf #接上,是由于在从配置文件里,自动定义了这个,从只能读不能写
slave-read-only yes