最近想详细学习下redis,利用vagrant复制了个linux系统,把安装过程及遇到的问题记录下来,以备后用.
一.在其中一台linux服务器上安装redis服务.
1.下载某版本的安装包:wget http://download.redis.io/releases/redis-4.0.8.tar.gz
解压:tar -zvxf redis-4.0.8.tar.gz
2.安装
cd redis-4.0.8
make
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;
}
}
?>
//调用:
<?php
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;
}
}
?>
//调用;
<?php
include_once("memcacheServer.php");
$config=["host"=>"192.168.66.59","11211"];
$memServer=new memcachedServer($config);
$mem=$memServer->getMem();
$mem->set("say","hello memcacheService1");
var_dump($mem->get("say"));exit;
?>