Methoden und Parameterkommentare zum Betrieb von Beanstalkd in PHP

不言
Freigeben: 2023-04-02 18:08:02
Original
2433 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Methoden und Parameterkommentare zum Betrieb von Beanstalkd in PHP vor. Er hat einen gewissen Referenzwert. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.

Einführung in Beanstalkd

Was ist Beanstalkd

Beanstalk ist ein leistungsstarkes, leichtes Warteschlangensystem mit verteiltem Speicher. Es wurde ursprünglich entwickelt, um den Seitenzugriff von Webanwendungssystemen mit hohem Volumen durch die asynchrone Ausführung zeitaufwändiger Aufgaben zu reduzieren Hintergrund: Delay, unterstützte die Facebook Causes-Anwendung mit 9,5 Millionen Nutzern.

PostRank wurde später als Open-Source-Lösung veröffentlicht und wird heute in großem Umfang bereitgestellt und genutzt, wobei täglich Millionen von Aufgaben verarbeitet werden. Beanstalkd ist ein typisches Memcached-ähnliches Design. Das Protokoll und die Verwendung sind gleich, sodass Benutzer, die Memcached verwendet haben, das Gefühl haben, dass Beanstalkd vertraut ist.

Beanstalkd-Laufprozess

Typischer Lebenszyklus eines Jobs

   put            reserve               delete
  -----> [READY] ---------> [RESERVED] --------> *poof*
Nach dem Login kopieren

Mögliche Statusmigration des Jobs

   put with delay               release with delay
  ----------------> [DELAYED] <------------.
                        |                   |
                 kick   | (time passes)     |
                        |                   |
   put                  v     reserve       |       delete
  -----------------> [READY] ---------> [RESERVED] --------> *poof*
                       ^  ^                |  |
                       |   \  release      |  |
                       |    `-------------&#39;   |
                       |                      |
                       | kick                 |
                       |                      |
                       |       bury           |
                    [BURIED] <---------------&#39;
                       |
                       |  delete
                        `--------> *poof*
Nach dem Login kopieren

Beanstalkd-Installation

Überspringen Sie die Installation, falls erforderlich, lesen Sie bitte die Referenz

Hinweis: Composer muss installiert werden, Tutorial-Link Composer Installationsmethode
Pheanstalk-Installation

Die

Drittanbieterbibliothek, die zum Betrieb verwendet wird Beanstalkd, die Installation wird übersprungen, ggf. siehe ReferenzPHP

Pheanstalk-Operation

Beanstalkd verbinden

<?php
require __DIR__ . &#39;/vendor/autoload.php&#39;;

use Pheanstalk\Pheanstalk;

/**
 * 实例化beanstalk
 * 参数依次为:ip地址 端口号默认11300 连接超时时间 是否长连接
 */
$pheanstalk = new Pheanstalk(&#39;127.0.0.1&#39;, 11300, 3, false);
?>
Nach dem Login kopieren

Beanstalkd-Statusmethode

Beanstalkd-Status

$stats = $pheanstalk->stats();
Nach dem Login kopieren

gibt zurück:

Pheanstalk\Response\ArrayResponse Object
(
    [_name:Pheanstalk\Response\ArrayResponse:private] => OK
    [storage:ArrayObject:private] => Array
        (
            [current-jobs-urgent] => 0 //当前存在优先级的任务数
            [current-jobs-ready] => 0 //当前准备就绪的任务数
            [current-jobs-reserved] => 0 //当前处于阻塞的任务数
            [current-jobs-delayed] => 0 //当前处于延迟状态的任务数
            [current-jobs-buried] => 0 //当前预留的任务数
            [cmd-put] => 0 //cmd命令为累计运行次数
            [cmd-peek] => 0
            [cmd-peek-ready] => 0
            [cmd-peek-delayed] => 0
            [cmd-peek-buried] => 0
            [cmd-reserve] => 0
            [cmd-reserve-with-timeout] => 0
            [cmd-delete] => 0
            [cmd-release] => 0
            [cmd-use] => 0
            [cmd-watch] => 0
            [cmd-ignore] => 0
            [cmd-bury] => 0
            [cmd-kick] => 0
            [cmd-touch] => 0
            [cmd-stats] => 1
            [cmd-stats-job] => 0
            [cmd-stats-tube] => 0
            [cmd-list-tubes] => 3
            [cmd-list-tube-used] => 0
            [cmd-list-tubes-watched] => 0
            [cmd-pause-tube] => 0
            [job-timeouts] => 0 //超时的任务
            [total-jobs] => 0 //任务总数
            [max-job-size] => 65535 //任务字符串大小
            [current-tubes] => 1 //当前的管道数
            [current-connections] => 1 //当前打开的连接数
            [current-producers] => 0 //当前生产者数量
            [current-workers] => 0 //当前消费者数量
            [current-waiting] => 0 //发出reserved指令,但没有响应的数量
            [total-connections] => 4 //累计链接数量
            [pid] => 530 //Beanstalkd进程id
            [version] => 1.10
            [rusage-utime] => 0.003545
            [rusage-stime] => 0.007473
            [uptime] => 105855 //运行时间(秒)
            [binlog-oldest-index] => 0
            [binlog-current-index] => 0
            [binlog-records-migrated] => 0
            [binlog-records-written] => 0
            [binlog-max-size] => 10485760
            [id] => 4199e3eca8bfdea8
            [hostname] => lmmlwendeMacBook-Air.local
        )
)
Nach dem Login kopieren

Aktuelle Pipeline-Liste

$listTubes = $pheanstalk->listTubes();
Nach dem Login kopieren

Pipeline-Details anzeigen

$stats = $pheanstalk->statsTube();
Nach dem Login kopieren

Rückgabe:

Pheanstalk\Response\ArrayResponse Object
(
    [_name:Pheanstalk\Response\ArrayResponse:private] => OK
    [storage:ArrayObject:private] => Array
        (
            [name] => default //当前管道名
            [current-jobs-urgent] => 0 //当前管道存在优先级的任务数
            [current-jobs-ready] => 0 //当前管道准备就绪的任务书
            [current-jobs-reserved] => 0 //当前管道处于阻塞的任务数
            [current-jobs-delayed] => 0 //当前管道处于延迟状态的任务数
            [current-jobs-buried] => 0 //当前管道预留的任务数
            [total-jobs] => 0 //当前管道总任务数
            [current-using] => 1 //当前管道生产者数量
            [current-watching] => 1 //当前管道消费者数量
            [current-waiting] => 0 //发出reserved指令,但没有响应的数量
            [cmd-delete] => 0
            [cmd-pause-tube] => 0
            [pause] => 0
            [pause-time-left] => 0
        )
)
Nach dem Login kopieren

Aufgabendetails anzeigen

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$job_stats = $pheanstalk->statsJob($job);
Nach dem Login kopieren

Rückgabe:

Pheanstalk\Response\ArrayResponse Object
(
    [_name:Pheanstalk\Response\ArrayResponse:private] => OK
    [storage:ArrayObject:private] => Array
        (
            [id] => 1 //任务job ID
            [tube] => test //所处管道
            [state] => reserved //当前状态
            [pri] => 1024 //任务优先级(默认1024)
            [age] => 469 //任务存活时间(秒)
            [delay] => 0 //任务延迟时间(秒)
            [ttr] => 60 //任务执行时间
            [time-left] => 59 //任务在reserve状态维持的秒数
            [file] => 0 // binlog-4 默认-0
            [reserves] => 2 //总共reserve次数
            [timeouts] => 0 //任务超时次数
            [releases] => 0 //重设任务次数
            [buries] => 0 //预留次数
            [kicks] => 0 //释放预留任务次数
        )
)
Nach dem Login kopieren

Aufgabendetails anzeigen ( via ID)

$job =  $pheanstalk->peek(1);
$job_stats = $pheanstalk->statsJob($job);
Nach dem Login kopieren

Beanstalkd-Produzentenmethode

Geben Sie die zu verwendende Pipe an

$tube = $pheanstalk->useTube(&#39;default&#39;);
Nach dem Login kopieren

Daten in die Pipe einfügen

$tube = $pheanstalk->useTube(&#39;default&#39;);
$put = $tube->put(
    'hello, beanstalk', // 任务内容
    1024, // 任务的优先级
    10,  // 不等待直接放到ready队列中
    60 // 处理任务的时间
);
Nach dem Login kopieren

Oder:

$pheanstalk->putInTube(&#39;default&#39;,  &#39;test1&#39;, 1024, 10, 60);
Nach dem Login kopieren

Beanstalkd-Consumer-Methode

Anhören das Rohr

$tube =  $pheanstalk->watch(&#39;user&#39;);
Nach dem Login kopieren

Rohre entfernen, die nicht überwacht werden müssen

$tube =  $pheanstalk->watch(&#39;user&#39;)->ignore(&#39;default&#39;);
Nach dem Login kopieren

Hören Sie zu zu verstopften Leitungen

$job =  $pheanstalk->watch(&#39;user&#39;)->reserve(4); //堵塞时间为4秒
Nach dem Login kopieren

Alle überwachten Leitungen auflisten

$pheanstalk->listTubesWatched();
Nach dem Login kopieren

watch + Methode reservieren

$pheanstalk->reserveFromTube(&#39;default&#39;)
Nach dem Login kopieren

Aktuelle Aufgabe löschen

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$pheanstalk->delete($job);
Nach dem Login kopieren

Aktuelle Aufgabe wieder einfügen die Pipeline

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$pheanstalk->release($job);
Nach dem Login kopieren

Erneuern Sie die Lebensdauer der Aufgabe (wenn die Zeit zur Verarbeitung der Aufgabe kürzer ist als die aktuelle Ausführungszeit der Aufgabe)

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$pheanstalk->touch($job);
//TODO
Nach dem Login kopieren

Reservieren Sie die Aufgabe

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$pheanstalk->bury($job);
Nach dem Login kopieren

Geben Sie die reservierte Aufgabe frei (Ändern Sie den Reday-Status)

$job = $pheanstalk->peekBuried(&#39;default&#39;);
$pheanstalk->kickJob($job);
Nach dem Login kopieren

Reservierte Aufgaben stapelweise freigeben

$pheanstalk->userTube(&#39;default&#39;)->kick(999); //将id小于999的预留任务全部释放
Nach dem Login kopieren

Die aktuell bereitstehenden Aufgaben lesen (bereit)

$job = $pheanstalk->peekReady(&#39;default&#39;);
Nach dem Login kopieren

Die aktuell verzögerte Aufgabe lesen (verzögert)

$job = $pheanstalk->peekDelayed(&#39;default&#39;);
Nach dem Login kopieren

Verzögerung für die Pipeline festlegen

$pheanstalk->pauseTube(&#39;default&#39;, 100); //设置100秒延迟
Nach dem Login kopieren

Verzögerung in der Pipeline aufheben

$pheanstalk->resumeTube(&#39;default&#39;);
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt dieses Artikels Hilfreich für das Studium aller. Weitere verwandte Inhalte finden Sie auf der chinesischen Website von PHP!

Verwandte Empfehlungen:

Die von PHP implementierte Intranet-Penetrationsanwendung Spike wurde rekonstruiert

php ruft Phantomjs zu WeChat Mini auf Programmfreigabe

Das obige ist der detaillierte Inhalt vonMethoden und Parameterkommentare zum Betrieb von Beanstalkd in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage