redis的使用
安装redis前先安装hiredis库
- 下载安装phpre dis,官网下载redis安装包
- 解压
- 进入目录后make
进入src目录执行 ./redis-server 开启服务 默认端口为6379
可在根目录 redis.conf 下修改端口
客户端执行,./redis-cli
example:(其他命令参考官网手册)
set chuangxiang 77
get chuangxiang
安装phpredis
apt install git
1.下载phpredis扩展文件
git clone https://github.com/phpredis/phpredis.git
2.生成configure
cd [ ] phpize
3.编译安装
./configure
make
make install
4.在php.ini中添加扩展
extension=redis.so
hiredis下载,在swoole手册中有下载地址
- 解压,unzip [xxx]
- make –j
- sudo make install
启动服务:
sudo ldconfig
重新编译
在Swoole中使用redis需要重新编译,由于之前安装没有选择过多扩展,一般是会在一开始全部安装完成
进入swoole目录利用configure重新编译
- ./configure --with-php-config=/home/work/study/soft/php/bin/php-config --enable-async-redis
- make clean
- make –j
- sudo make install
//查看是否安装成功
php –m
php --ri swoole
redis案例
使用前开启redis
$redisClient = new swoole_redis;
$redisClient->connect('localhost', 6379, function(swoole_redis $redisClient, $result) {
echo "connect".PHP_EOL;
var_dump($result);
//同步 redis(new Redis())->set('key',2);
$redisClient->set('chuangxiang_1', time(), function(swoole_redis $redisClient, $result){
var_dump($result);
});
});
echo "start".PHP_EOL;
读取部分值
$redisClient->get('chuangxiang_1', function(swoole_redis $redisClient, $result){
var_dump($result);
$redisClient->close();
});
读取所有key值:(模糊获取)
获取键名而不是内容
$redisClient->keys('*g_*', function(swoole_redis $redisClient, $result){
var_dump($result);
redisClient->close();
});
可改为’*’获取全部键值
//相关命令可去redis官网/coommands下查询
进程通信
第二个参数如果为true,则在回调函数内输出不会到屏幕而是管道内
在进程内执行外部程序
$process = new swoole_process(function(swoole_process $pro){
//todo
//php redis.php
$pro->exec("/home/work/study/soft/php/bin/php", [__DIR__.'/../server/http_server.php']);
}, false);
$pid = $process->start();
echo $pid.PHP_EOL;
swoole_process::wait();
新建process.php为一个父进程
echo "process-start-time:".date("Ymd H:i:s").PHP_EOL;
$workers = [];
$urls = [
'http://baidu.com',
'http://sina.com.cn',
'http://qq.com',
'http://baidu.com?search=chuangxiang',
'http://baidu.com?search=shaoguan',
'http://baidu.com?search=chaozhou'
];
for($i = 0; $i < 6; $i++){
//子进程
$process = new swoole_process(function(swoole_process $worker) use($urls, $i){
//curl
$content = curlData($urls[$i]);
echo $content.PHP_EOL;
//$worker->write($content.PHP_EOL);
}, true);//输出到管道
$pid = $process->start();
$workers[$pid] = $process;
}
foreach ($workers as $process) {
echo $process->read();//从管道之中读数据
}
/**
* 模拟请求URL的内容 1s
* @param $url
* @return string
*/
function curlData($url){
//curl file_get_contents
sleep(1);
return $url . "success".PHP_EOL;
}
echo "process-end-time:".date("Ymd H:i:s");
可以考虑应用在excle表的导入与导出