PHPackages                             silverslice/redis-queue - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Caching](/categories/caching)
4. /
5. silverslice/redis-queue

ActiveLibrary[Caching](/categories/caching)

silverslice/redis-queue
=======================

Redis queue

v0.1.0(3y ago)03MITPHPPHP &gt;=7.4

Since May 20Pushed 3y ago1 watchersCompare

[ Source](https://github.com/silverslice/redis-queue)[ Packagist](https://packagist.org/packages/silverslice/redis-queue)[ RSS](/packages/silverslice-redis-queue/feed)WikiDiscussions main Synced 6d ago

READMEChangelogDependenciesVersions (2)Used By (0)

Queue for Redis based on streams
================================

[](#queue-for-redis-based-on-streams)

Requirements
------------

[](#requirements)

- Redis &gt;= 6.2.0
- phpredis PHP extension

Install
-------

[](#install)

`composer require silverslice/redis-queue`

Features
--------

[](#features)

- Push messages with delay
- Individual retry strategy for each job
- Correct processing of tasks that terminate due to lack of memory

Usage
-----

[](#usage)

Create Job class:

```
namespace Silverslice\RedisQueue\Examples\Jobs;

use Silverslice\RedisQueue\AbstractJob;

class TestJob extends AbstractJob
{
    public $message;

    public function execute()
    {
        echo $this->message . ' ' . date('H:i:s') . "\n";
    }
}
```

Push job to the queue:

```
use Silverslice\RedisQueue\Connection;
use Silverslice\RedisQueue\Queue;
use Silverslice\RedisQueue\Examples\Jobs\TestJob;

require __DIR__ . '/../vendor/autoload.php';

// create connection to Redis
$conn = new Connection();
$queue = new Queue($conn);

// create job
$job = new TestJob();
$job->message = 'My message';

// push to the queue
$queue->push($job);

// push to the queue with delay 2 seconds
$queue->pushWithDelay($job, 2);
```

Run worker:

```
use Silverslice\RedisQueue\AbstractJob;
use Silverslice\RedisQueue\Connection;
use Silverslice\RedisQueue\Worker;

require_once __DIR__ . '/../vendor/autoload.php';

// each consumer in stream need unique name, so we pass name as argument on start worker
$options = getopt('', ['name:']);
if (!isset($options['name'])) {
    echo 'Usage: php worker.php --name worker_name' . PHP_EOL;
    exit(1);
}

$conn = new Connection();
$conn->consumer = $options['name'];
$worker = new Worker($conn);
$worker->setDebug(true);
$worker->onFail(function (AbstractJob $job, \Throwable $e) {
    echo '[!] Job failed: ' . serialize($job) . PHP_EOL;
    echo '[.] Error: ' . $e->getMessage() . PHP_EOL;
});
$worker->run();
```

Run system worker. System worker check pending messages and move delayed messages. Only one system worker should be running:

```
use Silverslice\RedisQueue\Connection;
use Silverslice\RedisQueue\SystemWorker;

require_once __DIR__ . '/../vendor/autoload.php';

$conn = new Connection();
$worker = new SystemWorker($conn);
$worker->maxFailures = 3;
$worker->setDebug(true);

// if job crashes more than maxFailures times
$worker->onFail(function($message, $id) {
    echo '[!] Message rejected: ' . $message . ' (id='. $id .')' . PHP_EOL;
});
$worker->run();
```

You can set individual retry logic in the job class. Default behaviour: maximum 5 retries, delay between retries is 1 second with multiplier 2 (1, 2, 4, 8, 16 seconds).

```
class TestJob extends AbstractJob
{
    public $message;

    public function execute()
    {

    }

    /**
     * Is job retryable?
     *
     * @param int $retries Number of retry
     * @return bool
     */
    public function isRetryable($retries): bool
    {
        return $retries message = 'Message with delay';
$queue->pushWithDelay($job, 10, true);

// overwrite delay
$queue->pushWithDelay($job, 15, true);

$date = date('Y-m-d H:i:s');
echo "[$date] Message sent\n";
```

For testing / local development SyncQueue class may be useful. SyncQueue executes job synchronously:

```
$queue = new SyncQueue($connection);

$job = new TestJob();
$job->message = 'My first job';

// will be executed synchronously
$queue->push($job);
```

See `Examples` directory for more samples.

###  Health Score

18

—

LowBetter than 8% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1456d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b17dfd96904635c115d4a2bdd334a63454336ed0dcd3f02290a39bca1dce44bd?d=identicon)[silverslice](/maintainers/silverslice)

---

Top Contributors

[![silverslice](https://avatars.githubusercontent.com/u/6722542?v=4)](https://github.com/silverslice "silverslice (7 commits)")

---

Tags

streamredisqueue

### Embed Badge

![Health badge](/badges/silverslice-redis-queue/health.svg)

```
[![Health](https://phpackages.com/badges/silverslice-redis-queue/health.svg)](https://phpackages.com/packages/silverslice-redis-queue)
```

###  Alternatives

[mjphaynes/php-resque

Redis backed library for creating background jobs and processing them later.

228199.3k2](/packages/mjphaynes-php-resque)[enqueue/redis

Message Queue Redis Transport

405.5M25](/packages/enqueue-redis)[javibravo/simpleue

Php package to manage queue tasks in a simple way

130332.1k1](/packages/javibravo-simpleue)[resquebundle/resque

A Symfony 4 bundle to manage Resque job queues

51137.1k1](/packages/resquebundle-resque)[spinx/sidekiq-job-php

Push and schedule jobs to Sidekiq from PHP

37219.6k](/packages/spinx-sidekiq-job-php)[pdffiller/qless-php

PHP Bindings for qless

29113.2k1](/packages/pdffiller-qless-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
