5、centos安装redis

来源:互联网 发布:网站后台系统源码java 编辑:程序博客网 时间:2024/05/14 22:56

一、     安装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 0m-1之间的值

    *

    * @param string $id

    * @param int $m

    * @return int

    */

   private function _hashId($id,$m=10)

    {

       //把字符串K转换为 0m-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

 

0 0
原创粉丝点击