1. 程式人生 > >Redis的安裝、使用以及php中擴充套件redis並實現php操作redis的一個例子

Redis的安裝、使用以及php中擴充套件redis並實現php操作redis的一個例子

1、下載原始碼包redis-2.8.21.tar.gz,並將其上傳到指定目錄/urs/src,然後對其進行解壓:

[[email protected] src]# tar -xvf redis-2.8.21.tar.gz

進入解壓後的目錄,並執行下面命令,指定安裝目錄為/urs/local/redis

[[email protected] src]# cd redis-2.8.21 

[[email protected] redis-2.8.21]# make PREFIX=/usr/local/redis install

安裝redis成功後,可以在/usr/local/redis看到一個

bin的目錄,裡面包括了以下檔案:

[[email protected] ~]# cd /usr/local/redis/bin/

[[email protected] bin]# ls

redis-benchmark  redis-check-aof  redis-check-dump  redis-cli  redis-sentinel  redis-server

2、新增redis啟動指令碼到服務中:

/etc/rc.d/init.d目錄,建立一個檔案,名為redis(說明:/etc/rc.d/init.d/目錄下的指令碼在系統啟動的時候某些指定指令碼將被執行),然後在檔案中新增如下內容:

[

[email protected] ~]# vim /etc/init.d/redis

#!/bin/bash 

# Init file for redis 

# chkconfig: - 80 12 

# description: redis daemon 

# processname: redis 

# config: /etc/redis.conf 

# pidfile: /var/run/redis.pid 

source /etc/init.d/functions

BIN="/usr/local/redis/bin"

CONFIG="/etc/redis/redis.conf"

PIDFILE="/var/run/redis.pid"

### Read configuration 

[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"

RETVAL=0

prog="redis-server"

desc="Redis Server"

start() {

        if [ -e $PIDFILE ];then

             echo "$desc already running...." 

             exit 1

        fi

        echo -n $"Starting $desc: " 

        daemon $BIN/$prog $CONFIG

        RETVAL=$?

        echo 

        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog

        return $RETVAL

}

stop() {

        echo -n $"Stop $desc: " 

        killproc $prog

        RETVAL=$?

        echo 

        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILE

        return $RETVAL

}

restart() {

        stop

        start

}

case "$1" in

  start)

        start

        ;;

  stop)

        stop

        ;;

  restart)

        restart

        ;;

  condrestart)

        [ -e /var/lock/subsys/$prog ] && restart

        RETVAL=$?

        ;;

  status)

        status $prog

        RETVAL=$?

        ;;

   *)

        echo $"Usage: $0 {start|stop|restart|condrestart|status}" 

        RETVAL=1

esac

exit $RETVAL

將解壓後的redis目錄下的配置檔案redis.conf拷貝到/etc/redis/redis.conf  (注意要與redis的啟動指令碼中的路徑一致

[[email protected] ~]# mkdir /etc/redis

[[email protected] ~]# cp /usr/src/redis-2.8.21/redis.conf  /etc/redis/redis.conf

然後將redis新增到註冊服務:

[[email protected] ~]# chkconfig --add redis 

[[email protected] ~]# chkconfig redis on

[[email protected] ~]# chkconfig --list redis

redis           0:off   1:off   2:on    3:on    4:on    5:on    6:off

重啟redis

[[email protected] ~]# service redis restart

Stop Redis Server:                                         [  OK  ]

Starting Redis Server:                                     [  OK  ]

檢視是否啟動成功:

[[email protected] ~]# ps -ef | grep redis  

root      2984     1  0 13:40 ?        00:00:00 /usr/local/bin/redis-server 0.0.0.0:6379         

root      2989  2444  0 13:40 pts/1    00:00:00 grep redis

修改/etc/redis/redis.conf,設定redis程序為後臺守護程序,並指定一個密碼:

[[email protected] ~]# vim /etc/redis/6379.conf 

daemonize yes     //daemonize:是否以後臺daemon方式執行

requirepass  20082009  //設定密碼為20082009

設定完後,需要重啟redis才能使設定生效:

[[email protected] ~]# service redis restart

修改環境變數檔案,新增如下內容:

vim /etc/profile  

#set redis path

export REDIS_HOME=/usr/local/redis

export PATH=${REDIS_HOME}/bin:${PATH}

通過source /etc/profile 使其立刻生效

3、呼叫redis-cli的命令進行簡單操作(注意是否啟動密碼驗證):

[[email protected] ~]# redis-cli                

127.0.0.1:6379> ping

(error) NOAUTH Authentication required.

127.0.0.1:6379> auth 20082009   //需要輸入密碼

OK

127.0.0.1:6379> ping

PONG

127.0.0.1:6379> set name lebron james

(error) ERR syntax error

127.0.0.1:6379> set name "lebron james"  //有空格的字串需要加“”

OK

127.0.0.1:6379> get name

"lebron james"

127.0.0.1:6379> set name lebronjames

OK

127.0.0.1:6379> get name

"lebronjames"

127.0.0.1:6379> 

4、php中擴充套件redis

下載php的一個擴充套件phpredis的原始碼包phpredis-2.2.4.tar.gz,將其上傳到伺服器指定位置,對其進行解壓,然後進入解壓後的目錄:

tar -xvf phpredis-2.2.4.tar.gz

cd phpredis-2.2.4

phpize生成configure配置檔案

[[email protected] phpredis-2.2.4]# /usr/local/php/bin/phpize 

然後執行如下命令:

[[email protected] phpredis-2.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config

[[email protected] phpredis-2.2.4]# make && make install

配置php支援phpredis,在php.ini檔案新增如下內容:

vim /usr/local/php/lib/php.ini 

extension=  /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/redis.so

然後重啟分別重啟nginxphp-fpmredis

service nginx restart

service php-fpm restart

service redis restart

檢視phpinfo(),顯示如下,表明php擴充套件redis成功:


一個簡單的php操作redis的例子:

<?php
   $redis = new Redis();
   $redis->connect('127.0.0.1', '6379') or die ("Could not to connect to redis"); //或者具體主機的IP地址也行
   $redis->set("test", “php handle redis");
   var_dump($redis->get('test'));
   echo "<br/>";
   $redis->del('test');   //刪除賦值
   var_dump($redis->get('test'));
  ?>


輸出結果:


從結果中可以看出,redis並沒有起到作用,後來分析分析,由於之前在redis.conf檔案中配置了密碼登入redis的限制,現在只需要把redis.conf裡面的 requirepass 20082009  這句註釋掉即可:#requirepass 20082009,然後重啟redisservice redis restart

再次執行php檔案,顯示如下結果,表明php操作redis成功:

Redis主從Master/Slave叢集配置:

Master: 172.16.2.33   6379

Slave:172.16.2.42  63791

由於前面已經配置好了masterredis了,現在配置slave只需按照前面的步驟進行即可,簡單步驟如下:

1)將redis的原始碼包redis-2.8.21.tar.gz通過scp 的方法遠端複製到slave主機上,進行解壓,進入解壓後的檔案,執行命令:make PREFIX=/usr/local/redis install,這樣就在slave上安裝了redis

2)接著修改環境變數檔案:vim etc/profile,新增export REDIS_HOME=/usr/local/redis export PATH=${REDIS_HOME}/bin:${PATH},並通過source使其生效;

3)然後將master主機上的/etc/init.d/redis 複製到slave對應的目錄上,另外把master主機上的/etc/redis/redis.conf檔案也複製到slave主機上對應的目錄上;

4)然後修改slave主機上的redis.conf,只需要將 # slaveof <masterip> <masterport> 修改為master對應的IPPORT即可:即修改為:slaveof 172.16.2.33 6379

5)接著將redis新增到chkconfig列表中:chkconfig --add redischkconfig redis on;然後重啟redisservice redis restart

6)檢視master主機上的資訊:

[[email protected] ~]# redis-cli info replication

# Replication

role:master

connected_slaves:1

slave0:ip=172.16.2.42,port=63791,state=online,offset=924,lag=1

master_repl_offset:924

。。。

檢視slave主機上的資訊:

[[email protected] ~]# redis-cli -p 63791 info replication

# Replication

role:slave

master_host:172.16.2.33

master_port:6379

master_link_status:up

。。。

7)寫同步測試(master主機上的寫入資料同步到slave主機上):

Master主機上:

[[email protected] ~]# redis-cli 

127.0.0.1:6379> set name james

OK

127.0.0.1:6379> get name

"james"

Slave主機上:

[[email protected] ~]# redis-cli -p 63791

127.0.0.1:63791> get name

"james"

127.0.0.1:63791> set name "lebron james"

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

slave開啟了只讀模式,所以從將不能寫入資料,可以保證資料只從主伺服器同步至從伺服器)

如果需要讓slave也能寫入資料,需要修改配置檔案redis.conf:將slave-read-only yes 修改為slave-read-only no,然後重啟redis(這樣配置後可以向slave寫入資料,但是不會同步到master,如下所示:)

Slave主機上:

[[email protected] ~]# redis-cli -p 63791   

127.0.0.1:63791> set name "lebron james"

OK

127.0.0.1:63791> get name

"lebron james"

Master主機上(slave主機上的資料並沒有同步到master上):

[[email protected] ~]# redis-cli 

127.0.0.1:6379> get name

"james"

127.0.0.1:6379>