phalcon怎么插入数据

phalcon怎么插入数据,第1张

//config/services.php中注册如下服务//缓存元数据$di->set('modelsMetadata',function(){$metaData=new\Phalcon\Mvc\Model\Metadata\Files(['metaDataDir'=>__DIR__.'/../apps/cache/metadata/'])return$metaData})//设置数据库链接记录查询$di->set('db',function()use($di){$eventsManager=$di->get("eventsManager")$logger=new\Phalcon\Logger\Adapter\File(__DIR__."/../apps/logs/debugs.log")$eventsManager->attach('db',function($event,$connection)use($logger){if($event->getType()=='beforeQuery'){$logger->log($connection->getSQLStatement(),\Phalcon\Logger::INFO)}if($event->getType()=='beforeSave'){$logger->log($connection->getSQLStatement(),\Phalcon\Logger::INFO)}})$connection=new\Phalcon\Db\Adapter\Pdo\Mysql(["host"=>"127.0.0.1","username"=>"root","password"=>"root","dbname"=>"ai_manage","charset"=>"utf8"])$connection->setEventsManager($eventsManager)return$connection},false)

消息队列Beanstalk详解

先从安装开始

##Github  https://github.com/kr/beanstalkd

cd beanstalkd-1.10

make 或者 make CFLAGS=-O2

   

注意,你不需要运行configure命令哦,因为对应的makefie已经是建立好了的。make之后在当前目录下生成了beanstalkd可执行程序,你也可以make install一下让它安装到/usr/local/bin中,或者你自己拷贝到一个自定义目录中即可。

./beanstalkd -hUse: ./beanstalkd [OPTIONS] Options: -b DIR   wal directory -f MS    fsync at most once every MS milliseconds (use -f0 for "always fsync") -F       never fsync (default) -l ADDR  listen on address (default is 0.0.0.0) -p PORT  listen on port (default is 11300) -u USER  become user and group -z BYTES set the maximum job size in bytes (default is 65535) -s BYTES set the size of each wal file (default is 10485760)            (will be rounded up to a multiple of 512 bytes) -c       compact the binlog (default) -n       do not compact the binlog -v       show version information -V       increase verbosity -h       show this help##b 设置二进制日志文件目录,Beanstalk支持把任务写入日志文件,便于恢复##l 设置监听地址##p 设置监听端口##v 查看版本 ################启动 不指定任何参数,表示在0.0.0.0 端口11300监听./beanstalkd &./beanstalkd -l 127.0.0.1 11301 &./beanstalkd -l 192.168.1.168 11302 &   在实际中应该监控这个进程,防止意外终止退出。为了更好理解Beanstalk的原理,建议阅读官方文档:github.com/kr/beanstalkd/blob/master/doc/protocol.md,以下是我个人的学习笔记:当Put一个job时,取决于是否设置了delay,job可能进入READY或DELAYED状态,DELAYED的job超时后(或者调用kick)变成READY,reserve命令取一个最新的READY的job并把其变为RESERVED状态(这个时候是被取出执行),RESERVED状态的job可以发送delete删除,也可以使用release释放,根据是否设置delay时间,可能变成READY或DELAYED状态,也可以调用bury命令让job进入休眠,休眠中的job可以被delete也可以用kick命令让其变为READY。当reserve一个READY状态的job去执行时,如果设置的运行超时时间,则在取出时开始计时,如果超时则会从新放回到READY队列。job的运行的剩余时间可以通过stats-job命令来查看。如果要分配更多时间给job,可以发送touch命令。命令reserve取job时,这个job可能来自任一tube(当前链接的watch list是多个时),默认,一个新链接watch一个叫default的tube。可以使用watch命令添加一个新的tube到watch list中(如果这样,一般就不要试图使用tube的名字来区分要执行的任务,比如有两个tube A和B,当reserve取job时,这个job可能来自A也可以来自B,不过前提是A和B都在watch list中)。如果要取指定tube的job,明确使用use即可,这样只会获取指定tube的job。可以在消费方建立新链接后,watch某个tube以期望获取它的job(也可以使用use只获取特定tube的job)。同样道理,要put某个job都某个tub,需要先使用use命令,否则就是put到默认的叫default的tube中。reserve命令只是取状态为READY的job,如果要去其它状态的job,则需要使用peek和peek-xxxx命令(peek-ready peek-delayed peek-buried)。job取出后根据它的状态可以做相应 *** 作,比如delete release bury kick。PHP框架Phalcon中提供对Beanstalk的客户端库://Connect to the queue$queue = new Phalcon\Queue\Beanstalk(array(    'host' => '127.0.0.1',    'port' => 11300))   链接到Beanstalk只有两个参数,并没有验证等信息,以上指定的就是默认值。Beanstalk是支持多host的,Phalcon\Queue\Beanstalk看来并没有实现这个。在调用put执行,应该首先调用choose()方法指定tube,否则就是使用default这个tube。(这个所谓的choose实际就是发送use命令)然后再调用put把job添加到你期望的tube中:1   $qid = $queue->put("Queue Message")   注意,put成功就返回job的标识符。以下展示一个完整的例子:$queue = new Phalcon\Queue\Beanstalk(array(        'host' => '127.0.0.1',        'port' => 11300)) $queue->choose("my_tube")for($i=0$i<10$i++){    $qid = $queue->put("My tube -- Queue Meaage $i")    echo $qid."\n"} $queue->choose("default")for($i=0$i<10$i++){    $qid = $queue->put("Default tube -- Queue Meaage $i")    echo $qid."\n"}   切换到消费端,首先要使用choose()来获取来自哪个tube的job(按照道理应该是调用watch()方法,但是实际测试,watch()没有起作用,只好换成choose指定特定tube),然后调用peekReady()获取一个Phalcon\Queue\Beanstalk\Job对象,当然如果失败就返回false,Job对象获取后,可以 *** 作自然就有delete() release() bury() touch() kick() 和 getBody(),其中getBody()获取Job的实际内容。$queue = new Phalcon\Queue\Beanstalk()//$queue->watch("my_tube")$queue->choose("my_tube") while(true){        if(($job = $queue->peekReady()) !== false){                $message = $job->getBody()                echo $message."\n"                $job->delete()        }else{                usleep(200000)        }}   Phalcon\Queue\Beanstalk提供了Beanstalk协议的大部分内容,但是状态相关的没有实现。为了详细查看Beanstalk,可以使用一个第三方的PHP程序(github.com/ptrofimov/beanstalk_console):


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6776512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存