一、 安装centos6.5系统、安装lamp或者lnmp环境
二、 安装tcl
http://www.centoscn.com/image-text/config/2014/0712/3285.html参考文章
http://www.jb51.net/article/62507.htm
yum install tcl
或者
cd /usr/local/src
wget http://downloads.sourceforge.net/tcl/tcl8.6.3-src.tar.gz
tar -zxvf tcl8.6.3-src.tar.gz
cd tcl8.6.3/unix/
./configure
make
make install
三、 安装配置redis
cd /usr/local/src
wget http://download.redis.io/releases/redis-2.8.19.tar.gz
tar zxvf redis-2.8.19.tar.gz
cd redis-2.8.19
make
make PREFIX=/usr/local/redis install //安装路径
cp redis.conf /usr/local/redis/ 复制配置文件
vim /usr/local/redis/redis.conf
我只修改了如下两项:
daemonizeyes #redis将以守护进程的方式运行,默认为no会暂用你的终端
timeout 300 #当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
四、 开机启动redis
vim /etc/init.d/redis
输入以下代码:
#!/bin/sh
#
# redis Startup script for RedisServer
#
# chkconfig: - 80 12
# description: Redis is an open source, advanced key-value store.
#
# processname: redis-server
# config: /etc/redis.conf
# pidfile: /var/run/redis.pid
source /etc/init.d/functions
BIN="/usr/local/redis/bin"
CONFIG="/usr/local/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
然后
chmod +x /etc/init.d/redis
chkconfig redis on
五、 开启停止redis
service redis start 开启
service redis stop 停止
service iptables restart 重启
六、 使用redis
cd /usr/local/redis/bin
./redis-cli
set foo bar
"bar"
若设置了密码,则
./redis-cli –a 123456(这是密码)
七、 php安装redis扩展
a) cd /usr/local/src
b) wget https://codeload.github.com/nicolasff/phpredis/zip/master
或者ftp上传源码包或者
wgethttp://redis.googlecode.com/files/redis-2.4.4.tar.gz
c) unzipmaster
cd phpredis-master
d) /usr/local/php/bin/phpize 根据自己的系统找到phpize的位置(find / -name phpize)
e) ./configure--with-php-config=/usr/local/php/bin/php-config红色部分根据自己的系统找到php-config的位置(find / -name php-config)
f) make&& make install
记下安装返回的信息
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ 即php的.so扩展所在位置
g) 打开php.ini文件
加入一行
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/redis.so
extension = redis.so
h) 重启apache或nginx: /usr/local/apache2/bin/apachectl restart
八、 php使用redis
<?php
$redis = new Redis();
$redis->connect('192.168.81.131',6379); //服务器ip
$redis->auth('123456'); //redis 密码
$redis->select(1);
$ret = $redis->set('www.osyunwei.com', 'osyunwei');
var_dump($ret);
$allKeys = $redis->keys('*');
print_r($allKeys);
?>
九、 redis命令
http://www.redis.net.cn/ redis中文官网
<?php
/**
* Redis操作,支持 Master/Slave的负载集群
*
* @authorV哥
*/
classRedisCluster{
//是否使用 M/S的读写集群方案
private $_isUseCluster = false;
//Slave句柄标记
private $_sn = 0;
//服务器连接句柄
private $_linkHandle = array(
'master'=>null,//只支持一台 Master
'slave'=>array(),//可以有多台 Slave
);
/**
*构造函数
*
* @param boolean $isUseCluster是否采用 M/S 方案
*/
public function __construct($isUseCluster=false){
$this->_isUseCluster = $isUseCluster;
}
/**
*连接服务器,注意:这里使用长连接,提高效率,但不会自动关闭
*
* @param array $config Redis服务器配置
* @param boolean $isMaster当前添加的服务器是否为 Master服务器
* @return boolean
*/
public function connect($config=array('host'=>'127.0.0.1','port'=>6379),$isMaster=true){
// default port
if(!isset($config['port'])){
$config['port'] = 6379;
}
//设置 Master 连接
if($isMaster){
$this->_linkHandle['master'] = new Redis();
$ret =$this->_linkHandle['master']->pconnect($config['host'],$config['port']);
}else{
//多个 Slave 连接
$this->_linkHandle['slave'][$this->_sn] = newRedis();
$ret =$this->_linkHandle['slave'][$this->_sn]->pconnect($config['host'],$config['port']);
++$this->_sn;
}
return $ret;
}
/**
*关闭连接
*
* @param int $flag关闭选择 0:关闭 Master 1:关闭 Slave 2:关闭所有
* @return boolean
*/
public function close($flag=2){
switch($flag){
//关闭 Master
case 0:
$this->getRedis()->close();
break;
//关闭 Slave
case 1:
for($i=0; $i<$this->_sn; ++$i){
$this->_linkHandle['slave'][$i]->close();
}
break;
//关闭所有
case 1:
$this->getRedis()->close();
for($i=0; $i<$this->_sn; ++$i){
$this->_linkHandle['slave'][$i]->close();
}
break;
}
return true;
}
/**
*得到 Redis 原始对象可以有更多的操作
*
* @param boolean $isMaster返回服务器的类型 true:返回Master false:返回Slave
* @param boolean $slaveOne返回的Slave选择 true:负载均衡随机返回一个Slave选择 false:返回所有的Slave选择
* @return redis object
*/
public function getRedis($isMaster=true,$slaveOne=true){
//只返回 Master
if($isMaster){
return $this->_linkHandle['master'];
}else{
return $slaveOne ? $this->_getSlaveRedis() :$this->_linkHandle['slave'];
}
}
/**
*写缓存
*
* @param string $key组存KEY
* @param string $value缓存值
* @param int $expire过期时间, 0:表示无过期时间
*/
public function set($key, $value, $expire=0){
//永不超时
if($expire == 0){
$ret = $this->getRedis()->set($key, $value);
}else{
$ret = $this->getRedis()->setex($key,$expire, $value);
}
return $ret;
}
/**
*读缓存
*
* @param string $key缓存KEY,支持一次取多个 $key =array('key1','key2')
* @return string || boolean 失败返回 false,成功返回字符串
*/
public function get($key){
//是否一次取多个值
$func = is_array($key) ? 'mGet' : 'get';
//没有使用M/S
if(! $this->_isUseCluster){
return $this->getRedis()->{$func}($key);
}
//使用了 M/S
return $this->_getSlaveRedis()->{$func}($key);
}
/**
*条件形式设置缓存,如果 key不存时就设置,存在时设置失败
*
* @param string $key缓存KEY
* @param string $value缓存值
* @return boolean
*/
public function setnx($key, $value){
return $this->getRedis()->setnx($key, $value);
}
/**
*删除缓存
*
* @param string || array $key缓存KEY,支持单个健:"key1"或多个健:array('key1','key2')
* @return int删除的健的数量
*/
public function remove($key){
// $key => "key1" || array('key1','key2')
return $this->getRedis()->delete($key);
}
/**
*值加加操作,类似 ++$i ,如果 key不存在时自动设置为 0后进行加加操作
*
* @param string $key缓存KEY
* @param int $default操作时的默认值
* @return int 操作后的值
*/
public function incr($key,$default=1){
if($default == 1){
return $this->getRedis()->incr($key);
}else{
return $this->getRedis()->incrBy($key,$default);
}
}
/**
*值减减操作,类似 --$i ,如果 key不存在时自动设置为 0后进行减减操作
*
* @param string $key缓存KEY
* @param int $default操作时的默认值
* @return int 操作后的值
*/
public function decr($key,$default=1){
if($default == 1){
return $this->getRedis()->decr($key);
}else{
return $this->getRedis()->decrBy($key,$default);
}
}
/**
*添空当前数据库
*
* @return boolean
*/
public function clear(){
return $this->getRedis()->flushDB();
}
/*===================以下私有方法=================== */
/**
*随机 HASH 得到 Redis Slave 服务器句柄
*
* @return redis object
*/
private function _getSlaveRedis(){
//就一台 Slave 机直接返回
if($this->_sn <= 1){
return $this->_linkHandle['slave'][0];
}
//随机 Hash 得到 Slave 的句柄
$hash = $this->_hashId(mt_rand(), $this->_sn);
return $this->_linkHandle['slave'][$hash];
}
/**
*根据ID得到 hash后 0~m-1之间的值
*
* @param string $id
* @param int $m
* @return int
*/
private function _hashId($id,$m=10)
{
//把字符串K转换为 0~m-1之间的一个值作为对应记录的散列地址
$k = md5($id);
$l = strlen($k);
$b = bin2hex($k);
$h = 0;
for($i=0;$i<$l;$i++)
{
//相加模式HASH
$h += substr($b,$i*2,2);
}
$hash = ($h*1)%$m;
return $hash;
}
}// End Class