![336b6979b0860f1399c87ebbd5994304.png](https://i-blog.csdnimg.cn/blog_migrate/2bf259994e97913591c98d1064f7ed02.jpeg)
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
![9f5150df7b4ae375380137b7e39c8530.png](https://i-blog.csdnimg.cn/blog_migrate/71ad99df4f6b08b07fad902d2698eb19.png)
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下查询
进程通信
![7fa509d54018f5da01f4ab952412cd10.png](https://i-blog.csdnimg.cn/blog_migrate/66f85ffbf4cec893aff5e3e5d134d505.png)
第二个参数如果为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 = [
'百度一下,你就知道',
'新浪首页',
'腾讯首页',
'百度一下,你就知道',
'百度一下,你就知道',
'百度一下,你就知道'
];
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表的导入与导出
Swoole_table是一个基于共享内存和锁实现的超高性能,并发数据结构
$table = new swoole_table(1024);
//内存表增加一列
$table->column('id', $table::TYPE_INT, 4);
$table->column('name', $table::TYPE_STRING , 64);
$table->column('age', $table::TYPE_INT, 3);
$table->create();
//设置行的数据
$table->set('chuangxiang', [
'id' => 1,
'name' => 'chuangxiang',
'age' => 30,
]);
//另外一种设置行的数据
$table['chuangxiang2'] = [
'id' => 2,
'name' => 'shaoguan',
'age' => 35,
];
$table->incr('chuangxiang', 'age', 2); //增加
$table->decr('chuangxiang2', 'age', 2); //减少
$table->del('chuangxiang'); //删除
print_r($table->get('chuangxiang'));
print_r($table['chuangxiang2']);
上面的案例创建了一张内存表,内存一旦释放,内存表即消失
内存表用于共享很方便
协程(redis)
Swoole在2.0开始内置协程(Coroutine)的能力,提供了具备协程能力IO接口(统一在命名空间SwooleCoroutine*)。
开发者可以无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护。
- 把普通功能的实现方式变成协程
- 必须使用在onRequet,onReceive,onConnect回调中使用
$http = new Swoole_http_server('0.0.0.0', 8001);
$http->on('request', function($request, $response){
//获取redis里面的key的内容,然后输出浏览器
$redis = new SwooleCoroutineRedis();
$redis->connect('localhost', 6379);
$value = $redis->get($request->get['a']);
$response->header("Content-Type", "text/plain");
$response->end($value);
});
$http->start();
$request->get[‘a’] //获得通过地址带参传的值
![e4c8be3cab3f17e36013c4f9d0a83909.png](https://i-blog.csdnimg.cn/blog_migrate/2fc6f62ccd49dd79a2049eb2057f40be.png)