79.redis慢查詢 擴展模塊及sessions 主從配置

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

相關文章
相關標籤/搜索