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看到一個
[[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/目錄下的指令碼在系統啟動的時候某些指定指令碼將被執行),然後在檔案中新增如下內容:
[
#!/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
然後重啟分別重啟nginx,php-fpm和redis:
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,然後重啟redis:service redis restart
再次執行php檔案,顯示如下結果,表明php操作redis成功:
Redis主從Master/Slave叢集配置:
Master: 172.16.2.33 6379
Slave:172.16.2.42 63791
由於前面已經配置好了master的redis了,現在配置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對應的IP和PORT即可:即修改為:slaveof 172.16.2.33 6379;
5)接著將redis新增到chkconfig列表中:chkconfig --add redis;chkconfig redis on;然後重啟redis:service 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>