linux 学习笔记-080-NoSQL-redis 慢查询日志,redis 存储 session,redis 主从配置,php 安装 redis 扩展

发布于 2018-05-04  219 次阅读


redis 慢查询日志

编辑配置文件/etc/redis.conf

针对慢查询日志,可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除

01

redis 的慢查询日志相关设置需要修改配置文件

[root@am-01:~#] vim /etc/redis.conf

slowlog-log-slower-than 10000

#单位 ms,表示慢于 1000ms 则记录日志

slowlog-max-len 128

#定义日志长度,表示最多存 128 条

02

为方便测试,这里先把"slowlog-log-slower-than 10000"改为 10

slowlog get  ----  列出所有的慢查询日志

slowlog get 2  ----  只列出 2 条

slowlog len  ----  查看慢查询日志条数

[root@am-01:~#] vim /etc/redis.conf

slowlog-log-slower-than 10

[root@am-01:~#] killall redis-server

[root@am-01:~#] redis-server /etc/redis.conf

[root@am-01:~#] redis-cli -a 'itsupport.0'

127.0.0.1:6379> SLOWLOG get

1) 1) (integer) 0

   2) (integer) 1525428339

   3) (integer) 780

   4) 1) "COMMAND"

   5) "127.0.0.1:37432"

   6) ""

127.0.0.1:6379> KEYS *

(empty list or set)

127.0.0.1:6379> SLOWLOG get

1) 1) (integer) 2

   2) (integer) 1525428360

   3) (integer) 22

   4) 1) "KEYS"

      2) "*"

   5) "127.0.0.1:37432"

   6) ""

2) 1) (integer) 1

   2) (integer) 1525428346

   3) (integer) 45

   4) 1) "SLOWLOG"

      2) "get"

   5) "127.0.0.1:37432"

   6) ""

3) 1) (integer) 0

   2) (integer) 1525428339

   3) (integer) 780

   4) 1) "COMMAND"

   5) "127.0.0.1:37432"

   6) ""

127.0.0.1:6379> SLOWLOG get 1

1) 1) (integer) 3

   2) (integer) 1525428365

   3) (integer) 57

   4) 1) "SLOWLOG"

      2) "get"

   5) "127.0.0.1:37432"

   6) ""

127.0.0.1:6379> SLOWLOG get 2

1) 1) (integer) 4

   2) (integer) 1525428398

   3) (integer) 50

   4) 1) "SLOWLOG"

      2) "get"

      3) "1"

   5) "127.0.0.1:37432"

   6) ""

2) 1) (integer) 3

   2) (integer) 1525428365

   3) (integer) 57

   4) 1) "SLOWLOG"

      2) "get"

   5) "127.0.0.1:37432"

   6) ""

127.0.0.1:6379> SLOWLOG len

(integer) 6

php 安装 redis 扩展模块

redis 跟之前的 memcached 一样,也可以以扩展模块形式给 php 使用

01

下载并解压 phpredis 包

[root@am-01:~#] cd /usr/local/src/

[root@am-01:/usr/local/src#] wget https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip

--2018-05-04 18:09:53--  https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip

正在解析主机 coding.net (coding.net)... 123.59.89.123, 106.75.107.11, 123.59.89.203, ...

正在连接 coding.net (coding.net)|123.59.89.123|:443... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:未指定 [application/octet-stream]

正在保存至: “phpredis.zip”



    [  <=>                                                                  ] 224,818      968KB/s 用时 0.2s  



2018-05-04 18:09:59 (968 KB/s) - “phpredis.zip” 已保存 [224818]

[root@am-01:/usr/local/src#] unzip phpredis.zip

02

编译安装 phpredis 并修改 php-fpm 配置文件,最后重启一下 php-fpm

[root@am-01:/usr/local/src#] cd phpredis-develop/

[root@am-01:/usr/local/src/phpredis-develop#] /usr/local/php-fpm/bin/phpize

Configuring for:

PHP Api Version:         20131106

Zend Module Api No:      20131226

Zend Extension Api No:   220131226

[root@am-01:/usr/local/src/phpredis-develop#] ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

[root@am-01:/usr/local/src/phpredis-develop#] make

[root@am-01:/usr/local/src/phpredis-develop#] make install

Installing shared extensions:     /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/

[root@am-01:/usr/local/src/phpredis-develop#] vim /usr/local/php-fpm/etc/php.ini

extension="redis.so"

[root@am-01:/usr/local/src/phpredis-develop#] /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

[root@am-01:/usr/local/src/phpredis-develop#] /usr/local/php-fpm/sbin/php-fpm -m

[PHP Modules]

redis

redis 存储 session

把 php 的 session 存储到 redis 中

三种方法

01:修改 php 配置文件

vim /usr/local/php-fpm/etc/php.ini

session.save_handler = "redis"

session.save_path = "tcp://127.0.0.1:6379"

02:修改 apache 虚拟主机配置文件:

php_value session.save_handler "redis" php_value session.save_path "tcp://127.0.0.1:6379"

03:修改 php-fpm 配置文件对应的 pool:

php_value[session.save_handler] = redis

php_value[session.save_path] = " tcp://127.0.0.1:6379 "

这里直接使用第三种方法做实验

[root@am-01:~#] vim /usr/local/php-fpm/etc/php-fpm.d/

aaa.conf  www.conf 

[root@am-01:~#] vim /usr/local/php-fpm/etc/php-fpm.d/aaa.conf

php_value[session.save_handler] = redis

php_value[session.save_path] = " tcp://127.0.0.1:6379 "

#这个 IP 地址是指 redis 所在的 IP 地址

测试

01

为方便测试,先把 redis 的密码关闭

[root@am-01:~#] /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

[root@am-01:~#] vim /etc/redis.conf

#requirepass itsupport.0

[root@am-01:~#] killall redis-server

[root@am-01:~#] redis-server /etc/redis.conf

02

这里直接使用之前测试 memcached 留下的 php 文件做 redis 的测试,最后测试可以见到,redis 中多了几个 key

具体看这:php 测试文件

[root@am-01:~#] cd /data/wwwroot/default/

[root@am-01:/data/wwwroot/default#] ls

index.html  session.php

[root@am-01:/data/wwwroot/default#] curl aaa.com/session.php

1525431359<br><br>1525431359<br><br>adannmmo76rt45jd8mr658k5n6

[root@am-01:/data/wwwroot/default#] curl aaa.com/session.php

1525431361<br><br>1525431361<br><br>hc6vp5shlpdkjbcdkb6tung5d4

[root@am-01:/data/wwwroot/default#] curl aaa.com/session.php

1525431361<br><br>1525431361<br><br>lsei0kscd9qtc55bbc5i3qmsa1

[root@am-01:/data/wwwroot/default#] redis-cli

127.0.0.1:6379> KEYS *

1) "PHPREDIS_SESSION:lsei0kscd9qtc55bbc5i3qmsa1"

2) "PHPREDIS_SESSION:adannmmo76rt45jd8mr658k5n6"

3) "PHPREDIS_SESSION:hc6vp5shlpdkjbcdkb6tung5d4"

redis 主从配置

redis 也能像 mysql 一样做主从

01

为方便测试,在一台机器上启动两个 redis 服务(即在一台机器上模拟成两台机器做 redis 的主从)

为了不跟主冲突,还需要修改一些配置(同一台机器下做主从的话)

[root@am-01:~#] cp /etc/redis.conf /etc/redis2.conf

[root@am-01:~#] vim /etc/redis2.conf

port 6380

pidfile /var/run/redis_6380.pid

logfile "/var/log/redis2.log"

dir /data/redis2

slaveof 127.0.0.1 6379

02

创建从的 dir 目录并启动,测试可以见到,从跟主是一样的,redis 主从会自动同步,从默认只读,由"slave-read-only yes"参数决定

[root@am-01:~#] mkdir /data/redis2

[root@am-01:~#] redis-server /etc/redis2.conf

[root@am-01:~#] ps aux | grep redis

root      91169  0.1  0.2 147312  2436 ?        Ssl  18:51   0:01 redis-server 127.0.0.1:6379

root      91430  0.1  0.2 147312  2352 ?        Ssl  19:11   0:00 redis-server 127.0.0.1:6380

root      91436  0.0  0.0 112676   980 pts/0    S+   19:12   0:00 grep --color=auto redis

[root@am-01:~#] redis-cli -h 127.0.0.1 -p 6380  ----  -h 指定 IP,-p 指定端口

127.0.0.1:6380> KEYS *

1) "PHPREDIS_SESSION:lsei0kscd9qtc55bbc5i3qmsa1"

2) "PHPREDIS_SESSION:adannmmo76rt45jd8mr658k5n6"

3) "PHPREDIS_SESSION:hc6vp5shlpdkjbcdkb6tung5d4"

127.0.0.1:6380> set key 111

(error) READONLY You can't write against a read only slave

总结

为了节省资源,我们可以在一台机器上启动两个 redis 服务

cp /etc/redis.conf  /etc/redis2.conf

vim /etc/redis2.conf //需要修改 port,dir,pidfile,logfile

还要增加一行,设置跟主不同监听端口(同一台机器的情况下)

slaveof 127.0.0.1 6379  ----  分别为主的 IP 和监听的端口

如果主上设置了密码,还需要增加

masterauth itsupport.0  ----  设置主的密码

启动之前不要忘记创建新的 dir 目录

redis-server /etc/redis2.conf

测试:在主上创建新的 key,在从上查看

注意:redis 主从和 mysql 主从不一样,redis 主从不用事先同步数据,它会自动同步过去