在安装lnmp之前要先把gcc升级到4.8以上,安装swoole,就轻松多了
gcc 4.8 安装
curl -Lks http://www.hop5.in/yum/el6/hop5.repo >/etc/yum.repos.d/hop5.repo
yum install gcc gcc-g++ -y
gcc --version
g++ --version
安装Redis和php的Redis扩展
1、安装Redis
1.1 如果没有安装wget,安装wget
yum install wget
1.2 在http://redis.io/download页面查看redis版本,并下载安装
wget http://download.redis.io/releases/redis-3.2.0.tar.gz
1.3 解压,并进入解压目录进行编译。编译成功后会在redis-3.2.0目录下生成相关文件
$ tar xzf redis-3.2.0.tar.gz
$ cd redis-3.2.0
$ make
如果make时没有发现gcc,那么安装gcc
yum install gcc gcc-c++ kernel-devel
再次make,如果出现如下错误
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
则使用如下命令进行make
make MALLOC=libc
1.4 在文件夹redis-3.2.0下启动redis服务,输入如下命令后回车。
./src/redis-server redis.conf &
1.4 检测
#检测后台进程是否存在
ps -ef |grep redis
#检测6379端口是否在监听
netstat -lntp | grep 6379
#使用`redis-cli`客户端检测连接是否正常
./src/redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set key "hello world"
OK
127.0.0.1:6379> get key
"hello world"
1.5 停止服务
#使用客户端
./src/redis-cli shutdown
#因为Redis可以妥善处理SIGTERM信号,所以直接kill -9也是可以的
kill -9 PID
2、安装Redis的PHP扩展
2.1 安装phpize
yum install php-devel
2.2 下载扩展源码包,直接用wget
#wget下载github上的文件
wget https://github.com/nicolasff/phpredis/archive/master.zip
2.3 如果没装unzip,需要先安装unzip
yum install unzip
2.4 解压master.zip
unzip master.zip
2.5 解压目录为phpredis-master,进入该文件夹,开始编译php扩展
phpize
2.6 配置环境
./configure
./configure --with-php-config=/usr/local/php/bin/php-config
2.7 编译
make && make install
编译完成后显示:
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/lib64/php/modules/
进入/usr/lib64/php/modules/文件夹,发现redis.so的扩展
2.8 修改/etc/php.ini,添加下面的扩展
extension=redis.so
2.9 重启服务器
service httpd restart
这里php7会出错,下载https://github.com/edtechd/phpredis重新编译
最后查看phpinfo,显示如下,代表安装成功:
3、PHP代码测试
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('name','zhou', 10);
$key_1 = $redis->get('name');
echo $key_1;
?>
升级gcc版本为:7.2.0
https://blog.csdn.net/guo_lei_lamant/article/details/79591986 centos7升级GCC4.8.5到GCC4.9.0
原因:安装swoole扩展时出现---> error "GCC 4.8 or later required
2、安装依赖包
isl-0.16.1.tar.bz2
gmp-6.1.0.tar.bz2
mpfr-3.1.4.tar.bz2
mpc-1.0.3.tar.bz2
依赖包下载地址:ftp://gcc.gnu.org/pub/gcc/infrastructure/
Swoole 4.1.1 安装
- 下载swoole源码
git clone https://gitee.com/swoole/swoole.git
2.编译
cd swoole && phpize
==> 生成configure 文件
./configure --with-php-config=/usr/local/php/bin/php-config
--with-php-config 后面的地址,根据自己的环境,替换为正确的地址
出现:configure: error: C compiler cannot create executables
在这之前我做了export CFLAGS+=-g和 export CFLAGS+=-g3
这样的一系列操作,然后才开始执行 ./configure,结果就出现了上面的错误提示。而我记得之前也执行了 exprot CFLAGS=-g然后执行./configure 是没有问题的。很是奇怪,去网上搜了一下,说是CFLAGS影响了./configure的执行,然后使用 export CFLAGS= 来清除CFLAGS,重新赋值 export CFLAGS=-g,之后再执行./configure就没有问题了。
make && make install
[root@local swoole]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
Installing header files: /usr/local/php/include/php/
[root@local swoole]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
opcache.a opcache.so redis.so swoole.so
将 swoole.so 再php.ini
中配置好,然后重启 php-fmp
service php-fpm restart
php -m
查看列表是否已经有swoole
或者php --ri swoole
也可以直接这样用
安装 hireids 让 swoole 支持 异步redis
wget https://github.com/redis/hiredis/archive/v0.14.0.tar.gz && tar -zxvf v0.14.0.tar.gz && cd hiredis-0.14.0/ && make -j && make install && ldconfig
重新编译swoole
./configure --with-php-config=/usr/local/php/bin/php-config --enable-swoole-debug --enable-async-redis && make clean && make && make install
可能遇到的问题php-m
发现swoole或者消失的英文通过php --ri swoole
没有显示async redis client
或redis client
vi ~/.bash_profile
在最后一行添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
source ~/.bash_profile
重新编译安装swoole即可
测试脚本
class AysRedis
{
const HOST = '127.0.0.1';
const PORT = 6379;
public $redis_client = null;
function __construct()
{
$this->redis_client = new swoole_redis;
}
/**
* 闭包里不好直接用变量,要用use
* @return bool
*/
public function execute($id, $username)
{
$this->redis_client->connect(self::HOST, self::PORT, function ($redis_client, $result) use ($id, $username) {
if ($result === false) {
var_dump($redis_client->connect_errno, $redis_client->connect_error);
die;
}
var_dump('wawa');
//设置值
$redis_client->set('wawa', time(), function (swoole_redis $redis_client, $result){
//设置是否成功的返回值
var_dump($result);
});
//取值
$redis_client->get('wawa', function (swoole_redis $redis_client, $result){
var_dump($result);
});
//取所有值
$redis_client->keys('*', function (swoole_redis $redis_client, $result){
var_dump($result);
});
//模糊匹配KEY
$redis_client->keys('*l*', function (swoole_redis $redis_client, $result){
var_dump($result);
});
$redis_client->close();
});
return true;
}
}
$ws = new AysRedis();
$result = $ws->execute(1, 'test');
print_r($result.PHP_EOL);
echo 'start:'.PHP_EOL;
链接:https://www.jianshu.com/p/58a3bd85ba4c