相关文章推荐
豁达的帽子  ·  nodejs + express ...·  1 年前    · 
读研的豌豆  ·  python ...·  1 年前    · 
飞翔的鼠标垫  ·  Python Qt ...·  1 年前    · 

Linux安装redis及安装php-redis扩展

最近想详细学习下redis,利用vagrant复制了个linux系统,把安装过程及遇到的问题记录下来,以备后用.

一.在其中一台linux服务器上安装redis服务.

1.下载某版本的安装包:wget download.redis.io/relea

解压:tar -zvxf redis-4.0.8.tar.gz

2.安装

cd redis-4.0.8
cd src
make install PREFIX=/usr/local/redis //安装到指定目录
//移动配置文件到安装目录
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc

3.配置

//配置redis为后台启动
vim /usr/local/redis/etc/redis.conf //将daemonize no 改成daemonize yes
//允许除本机外的其他机器访问
bind 192.168.66.59(redis服务器的某块网卡的地址:即其他服务器访问改redis服务器时访问对应访问该服务器的ip地址)
protected-mode no
//以上不做设置时,用其他服务器访问redis服务器时会被拒绝
//将redis加入到开机启动
vi /etc/rc.local 
//在里面添加内容:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (意思就是开机调用这段开启redis的命令)

4.开启服务

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 
//开启客户端
/usr/local/redis/bin/redis-cli 

5.redis 支持 string,hash(用户存储对象),list,set(包括无序和有序)四种类型;

二.再另外一台lnmp服务器上安装php redis扩展

通过wget获取并安装phpredis-2.2.4 phpize后make&&make install出错,报:error: ext/standard/php_smart_str.h: No such file or directory#include <ext/standard/php_smart_str.h>

查了下原因,因为php是7.1+,最新的 phpredis 分了几大分支,针对最新的PHP稳定发行版 php7 有专门为php7的分支,所以从github拉下phpredis 源码.

1.下载安装:

git clone phpredis/phpredis,此时clone失败报:error: Peer reports incompatible or unsupported protocol version. while accessing https://github.com/nicolasff/phpredis/info/refs
解决:https请求的原因更新curl libcurl库。
yum update -y nss curl libcurl
然后重新克隆
cd phpredis
which phpize
//用phpize生成configure配置文件 执行 
usr/bin/phpize 
./configure --with-php-config=/usr/bin/php-config //此处为php-config的路径,可用whereis php-config查看路径 或者 find / -name phpize 得到路径
make && make install
vim php.ini
//在最后添加:
extension=redis.so;
重启php service php-fpm restart
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/redis.so' - /usr/lib64/php/modules/redis.so: undefined symbol: php_json_decode_ex in Unknown on line 0
这是因为和json扩展加载顺序冲突导致的
解决方法:
不要在php.ini里加入extension=redis.so这行,可在php.d文件夹下创建新文件redis.ini,在redis.ini里加入extension=redis.so这行.
重启php
php -m 发现redis扩展加载上了
源码安装的redis开启关闭服务操作:
1.redis关闭 
redis-cli -h 127.0.0.1 -p 6379 shutdown
2.redis启动 
redis-server
如果上述方式都没有成功停止redis,则可以使用终极武器 kill -9
$ ps -ef | grep redis | awk ‘{print $2}’ | xargs kill -9


三.一个简单的redis连接封装类:

<?php
class redisServer{
    private $redis;
    private $attr=["dbId"=>0];
    //默认dbid;
    protected $dbId=0;
    private $expireTime;
    private $host;
    private $port;
    public function __construct($config=[],$attr=[]){
        $this->redis=new Redis();
        $this->attr=array_merge($this->attr,$attr);
        $this->host=$config["host"];
        $this->port=$config["port"] ? $config["port"]: 6379;
        $this->dbId=$attr["dbId"] ?$attr["dbId"]: 0;
        //$this->redis->connect($config["host"],$config["port"],$this->attr["timeout"]);
        $this->redis->connect($config["host"],$config["port"]);
        $this->redis->select($this->dbId);
        //$this->expireTime=time()+$this->attr["timeout"];
    public   function getRedis($config=[],$attr=[]){
        return $this->redis;
//调用:
require_once("redisServer.php");
$redisConfig=["host"=>"192.168.66.59","port"=>6379];
$attr=["dbId"=>0];
$redisServer=new redisServer($redisConfig,$attr);
$redis=$redisServer->getRedis();
$redis->set("say","hello");
var_dump($redis->get("say"));exit;

四.一个简单的memcached连接封装类:

<?php
class memcachedServer{
    private $host;
    private $port;
    private $memcache;
    public function __construct($config,$attr=[])
        $this->memcache= new Memcached();
        $this->memcache->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
        $this->host=$config["host"]??'127.0.0.1';
        $this->port=$config["port"]??11211;
        //避免单个php-fpm在建立完以persistent_id命名的长连接后不再重复建立长连接
        if(!count( $this->memcache->getServerList())){
            $this->memcache->addServer($this->host,$this->port);
    public function getMem(){
        return $this->memcache;
//调用;
include_once("memcacheServer.php");