bfwsoa框架高并发异步缓存和消息队列处理设置
在大型网站的架构中,往往就读写进行分离,这样也是为了保护好核心数据库,因为数据库的并发量和写的频率都是一个瓶颈,如果超出这个瓶颈,数据库就会挂掉,他会导致整个系统的奔溃,之前经常崩溃的12306就是这个原因导致的。
我们打个比方,一个连锁店的每个店的接纳能力有限,如果同一时间很多的消费者前去消费,就需要排队,不排队的话就可以去相邻的其他店消费,这就是系统架构的中的消息队列和集群了,任何一台服务器都是其极限,那么我们为了保证核心服务,会进行限流,排队等机制。
今天我们来教大家如何设置bfwsoa框架实现异步缓存更新及队列处理。
一、bfwsoa异步缓存更新
异步缓存更新就是缓存的读取与更新是异步的,缓存虽然设置了有效期,但是他会一直存在缓存服务器上,直到有进程来更新这个缓存,那么更新缓存的进程就是异步缓存更新进程,我们首先要设置cache服务器,可以选择file文件或redis、memcache然后在代码中要将client的缓存设置为异步 ,代码如下:
Client_Order::getInstance()->Cache(1000,true)->Select();设置完后我们要在cli中实时来更新到期的缓存,打开命令行输入一下指令:
php /data/index.php dom域 控制器 动作器 cache
我们发现更新缓存的进程开启了,一旦缓存到期,他会自动更新缓存的。
二、bfwsoa异步消息队列处理
首先要在config文件中自定义一个queue消息队列服务,指定服务者,例如redis然后在app目录的config.php中进行配置
$_config_arr['Globle'] = [ "service" => [ "Api_Order_Down" => [ "type" => "queue", //队列访问 "para" => 0, //将第一个参数作为key "limit" => 3 //针对key的访问只能有三次 ], "Api_Order_Bid" => [ "type" => "queue", "para" => 0, "once" => 1 //只能一次 ] ], ]上面的配置会让client_order中的down方法变成异步消息队列方式处理,为了防止重复往消息队列中推入消息,我们还设置了limit来限制推送次数。一般异步消息队列中执行完成后,会接结果放入cache中的reqid,只要大家定时去查这个cache中又有没有结果就好了。
下一步开启消息队列监听处理就好了。
php /data/index.php dom域 控制器 动作器 queue
消息队列的处理进程可以根据实际并发量和数据库瓶颈来设置多个。
网友评论0