霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

Redis及PHP扩展安装

最近要做的项目中有两个场景(好友动态、数据排行榜)我们决定使用Redis,关于哪些场景适合用Redis可以看看这些文章,Redis作者谈Redis应用场景,Redis能干啥?细看11种Web应用场景,几点建议,让Redis在你的系统中发挥更大作用。虽然Redis在有些地方还不是特别完善,如一些网友所说的Master\Slave、Sharding、多线程等,但是已经足够强大。目前国内在Redis上摸索最多的应该是新浪微博团队了,也看了 TimYang 及其团队关于Redis的一些分享。

这是网友对Tim提的的两个提问:
1:Redis的复制机制不完善,失步之后要重新同步所有数据。
Tim:可以架两级slave解决
2:Redis的操作时单线程的,没有办法利用多核的优势。
Tim:通过单服务器多端口刚好发挥这种优势。

今天就先在本地搭建试试,当然安装步骤大部分是来源网络,以后在使用的过程用有什么心得会继续记录下来。

1:安装Redis

wget http://redis.googlecode.com/files/redis-2.4.14.tar.gz
tar zxvf redis-2.4.14.tar.gz
cd redis-2.4.14
make

2:配置Redis

配置文件:

cp redis.conf /etc/ #这个文件时redis启动的配置文件

以下的配置文件的解释:
#是否作为守护进程运行

daemonize yes

#配置pid的存放路径及文件名,默认为当前路径下
pidfile redis.pid
#Redis默认监听端口
port 6379
#客户端闲置多少秒后,断开连接
timeout 300
#日志显示级别
loglevel verbose
#指定日志输出的文件名,也可指定到标准输出端口
logfile stdout
#设置数据库的数量,默认连接的数据库是0,可以通过select N来连接不同的数据库
databases 16
#保存数据到disk的策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 60 10000
#当dump .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#dump数据库的数据保存的文件名
dbfilename dump.rdb
#Redis的工作目录
dir /data/db/redis/
########### Replication #####################
#Redis的复制配置
# slaveof
# masterauth

############## SECURITY ###########
# requirepass foobared

############### LIMITS ##############
#最大客户端连接数
# maxclients 128
#最大内存使用率
# maxmemory

########## APPEND ONLY MODE #########
#是否开启日志功能
appendonly no
# 刷新日志到disk的规则
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否开启VM功能
vm-enabled no
# vm-enabled yes
vm-swap-file logs/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes

配置用于管理Redis进程的Shell脚本:

#!/bin/sh
#
# redis – this script starts and stops the redis-server daemon
#
# chkconfig: – 85 15
# description: Redis is a persistent key-value database
# processname: redis-server
# config: /etc/redis.conf
# config: /etc/sysconfig/redis
# pidfile: /var/run/redis.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ “$NETWORKING” = “no” ] && exit 0

redis=”/usr/local/redis-2.4.14/src/redis-server”
prog=$(basename $redis)

REDIS_CONF_FILE=”/etc/redis.conf”

[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis

lockfile=/var/lock/subsys/redis

start() {
[ -x $redis ] || exit 5
[ -f $REDIS_CONF_FILE ] || exit 6
echo -n $”Starting $prog: ”
daemon $redis $REDIS_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $”Stopping $prog: ”
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
stop
start
}

reload() {
echo -n $”Reloading $prog: ”
killproc $redis -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

case “$1″ in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $”Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}”
exit 2
esac

Redis官网上推荐了5种PHP扩展: Predis 、 PhpredisRediskaRedisServerRedisent .

我选择的是Phpredis

unzip owlient-phpredis-2.1.1-1-g90ecd17.zip

cd owlient-phpredis-2.1.1-1-g90ecd17/usr/bin/phpize

./configure -with-php-config=/usr/bin/php-config

make && make install

php.ini中添加extension=redis.so,重启Nginx。
Redis的PHP扩展

PHP扩展安装成功

connect('127.0.0.1',6379);
$redis->set('foo','This Is Test String! ');
echo $redis-get('foo');
?>

页面输输出:This Is Test String!  PHP连接Redis成功。

本文摘自:http://haili.me/archives/159