bfwsoa框架高并发异步缓存和消息队列处理设置

bfwsoa框架高并发异步缓存和消息队列处理设置

bfwsoa框架高并发异步缓存和消息队列处理设置

在大型网站的架构中,往往就读写进行分离,这样也是为了保护好核心数据库,因为数据库的并发量和写的频率都是一个瓶颈,如果超出这个瓶颈,数据库就会挂掉,他会导致整个系统的奔溃,之前经常崩溃的12306就是这个原因导致的。

我们打个比方,一个连锁店的每个店的接纳能力有限,如果同一时间很多的消费者前去消费,就需要排队,不排队的话就可以去相邻的其他店消费,这就是系统架构的中的消息队列和集群了,任何一台服务器都是其极限,那么我们为了保证核心服务,会进行限流,排队等机制。

今天我们来教大家如何设置bfwsoa框架实现异步缓存更新及队列处理。

一、bfwsoa异步缓存更新

异步缓存更新就是缓存的读取与更新是异步的,缓存虽然设置了有效期,但是他会一直存在缓存服务器上,直到有进程来更新这个缓存,那么更新缓存的进程就是异步缓存更新进程,我们首先要设置cache服务器,可以选择file文件或redis、memcache

然后在代码中要将client的缓存设置为异步 ,代码如下:

Client_Order::getInstance()->Cache(1000,true)->Select();

设置完后我们要在cli中实时来更新到期的缓存,打开命令行输入一下指令:

php /data/index.php dom域 控制器 动作器 cache

bfwsoa框架高并发异步缓存和消息队列处理设置

我们发现更新缓存的进程开启了,一旦缓存到期,他会自动更新缓存的。

二、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

bfwsoa框架高并发异步缓存和消息队列处理设置

消息队列的处理进程可以根据实际并发量和数据库瓶颈来设置多个。

{{collectdata}}

网友评论0