PHPackages                             zkillboard/redisq - 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. zkillboard/redisq

ActiveLibrary

zkillboard/redisq
=================

A simple queue based on Redis

v1.0.0(9y ago)464066JavaScriptCI passing

Since May 27Pushed 2mo ago10 watchersCompare

[ Source](https://github.com/zKillboard/RedisQ)[ Packagist](https://packagist.org/packages/zkillboard/redisq)[ RSS](/packages/zkillboard-redisq/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Important

🚨RedisQ will be sunsetted on May 31, 2026
=========================================

[](#redisq-will-be-sunsetted-on-may-31-2026)

Please see  for information on the replacement.

===

RedisQ
======

[](#redisq)

A simple queue service using Redis as the backend. All you have to do is point your code to . Then parse the JSON that you receive and do anything you like with it.

If no killmail has come in for 10 seconds, you'll receive a null package, example: {"package":null}

The server will remember your queueID for up to 3 hours, therefore, pauses in your code will not cause you to miss out on killmails.

##### Do I need Redis to use this service?

[](#do-i-need-redis-to-use-this-service)

You don't need Redis to use this service, its only called RedisQ because the service itself is powered by Redis.

##### How do I identify myself?

[](#how-do-i-identify-myself)

RedisQ will use the parameter queueID to identify you. This field is required! Example:

```
https://zkillredisq.stream/listen.php?queueID=Voltron9000

```

##### How can I wait less than 10 seconds if there isn't a new killmail?

[](#how-can-i-wait-less-than-10-seconds-if-there-isnt-a-new-killmail)

By default, RedisQ will wait up to 10 seconds for a new killmail to come in. To wait less than this 10 seconds, you can use the ttw parameter, which is short for timeToWait. Example:

```
https://zkillredisq.stream/listen.php?queueID=Voltron9000&ttw=1

```

And yes, you can combine the ttw and queueID parameters. The code will enforce a minimum of 1 and a maximum of 10 seconds.

##### Something changed with the way RedisQ works, help?

[](#something-changed-with-the-way-redisq-works-help)

As of August, 2025, a change has been implemented such that the /listen.php endpoint redirects to /object.php with an objectID for your next package. Be sure that whatever tool you are using can accommodate redirects.

```
https://zkillredisq.stream/object.php?objectID=NotRealObjectID

```

#### Limitations

[](#limitations)

- You may have one (1) request being handled at a time per queueID. Additional requests being served while another request is already polling will resolve with http code 429.
- You may request at a limit of two (2) requests per second per IP address. This limitations is enforced by CloudFlare – if you exceed this limitation your request will resolve with http code 429.

#### FAQ

[](#faq)

###### So, this seems too easy. What do I have to do again?

[](#so-this-seems-too-easy-what-do-i-have-to-do-again)

It really is very, very simple. All you have to do is point something at , that can be curl, file\_get\_contents, wget, etc. etc. Here's an example of getting a killmail with PHP

```
$raw = file_get_contents("https://zkillredisq.stream/listen.php?queueID=YourIdHere");
$json = json_decode($raw, true);
$killmail = $json['package'];

```

That's it, really. You now have a killmail. Put that into a loop and you can keep feeding yourself all the killmails as zKillboard gets them.

###### Can I have pauses between requests without missing any killmails?

[](#can-i-have-pauses-between-requests-without-missing-any-killmails)

Yes, RedisQ identifies you based on your queueID and will remember you for up to 3 hours. So you can setup cron jobs to run every minute, 5 minutes, 15 minutes, etc. and not worry about missing any of the killmails.

###### Can I use more than one connection on RedisQ?

[](#can-i-use-more-than-one-connection-on-redisq)

(This sections is currently deprecated, perhaps only temporarily)

Only one connection at a time is allowed. If you try for more the extra connections will receive a http 429 error. Too many 429 errors will cause your IP and userid (if provided) to be temporarily banned for several hours.

###### Can I subscribe to just my pilot's / character's / alliance's killmails?

[](#can-i-subscribe-to-just-my-pilots--characters--alliances-killmails)

Yes! Use the filter parameter. See the section below on RedisQ Filter Rules.

```
https://zkillredisq.stream/listen.php?queueID=Voltron9000&filter=alliance_id=434243723

```

If you pass an invalid filter then a 400 Invalid Request error is thrown.

###### Can you just redirect me to the killmail on ESI?

[](#can-you-just-redirect-me-to-the-killmail-on-esi)

Sure! Use the esi paramter with value 'y' and a redirect straight to the killmail will be given instead.

```
https://zkillredisq.stream/listen.php?queueID=Voltron9000&esi=y

```

###### Seriously? Why do this and not use websockets or something like that?

[](#seriously-why-do-this-and-not-use-websockets-or-something-like-that)

Websockets are great, sure, but I wanted to write something that was damn easy to implement in any language. RedisQ isn't trying to be fancy like websockets, it is only trying to disemminate killmails in a quick and very simple fashion.

###### Why is it called RedisQ?

[](#why-is-it-called-redisq)

Because I used Redis to implement what I was trying to do, it's a queue type service, and so I went with the completely unoriginal name RedisQ.

###### Why are you using .php extension when RedisQ isn't using PHP?

[](#why-are-you-using-php-extension-when-redisq-isnt-using-php)

The initial version of RedisQ utilized PHP as the backend language of choice. However, a subsequent rewrite is now using NodeJS. To keep things simple and allow for great backwards compatibility the endpoints kept their .php extension.

###### I thought the URL was redisq.zkillboard.com?

[](#i-thought-the-url-was-redisqzkillboardcom)

The URL was changed in May, 2025 to zkillredisq.stream.

###### How do I say RedisQ?

[](#how-do-i-say-redisq)

Everyone says it different, but I say it like red-is-q. You can say it however you want though.

RedisQ Filter Rules
===================

[](#redisq-filter-rules)

1. Operators
------------

[](#1-operators)

- `=` : equals
- `!=` : not equals
- `=` : greater than or equal

2. Chaining Rules
-----------------

[](#2-chaining-rules)

- **AND** (`;`): all conditions must match

    - Example: ```
        alliance_id=1234;damage_done>=500

        ```

        → Matches only if both conditions are true.
- **OR** (`,`): at least one condition must match

    - Example: ```
        alliance_id=1234,4321,5678

        ```

        → Matches if any of the listed conditions are true.
- **Important:** You cannot mix `;` and `,` in the same filter string.

3. Matching Behavior
--------------------

[](#3-matching-behavior)

- Works on **any key** inside the RedisQ `package` object (deeply nested).
- If a key’s value is an **array**, all elements of the array are searched.
- Values are compared as **numbers** if both sides are numeric, otherwise as strings.

4. Examples
-----------

[](#4-examples)

- `https://zkillredisq.stream/listen.php?queueID=Voltron9000&filter=character_id=5678`
    → true if any `character_id` equals 5678
- `https://zkillredisq.stream/listen.php?queueID=Voltron9000&filter=damage_done>=1000`
    → true if any `damage_done` is ≥ 1000
- `https://zkillredisq.stream/listen.php?queueID=Voltron9000&filter=alliance_id!=9999`
    → true if no matching `alliance_id` equals 9999
- `https://zkillredisq.stream/listen.php?queueID=Voltron9000&filter=alliance_id=1234;damage_done>500`
    → both must match (AND)
- `https://zkillredisq.stream/listen.php?queueID=Voltron9000&filter=character_id=1111,character_id=2222`
    → matches if either character ID is found
- `https://zkillredisq.stream/listen.php?queueID=Voltron9000&filter=labels=marked`
    → matches if any key `labels`, which could be a key or an array, equals or contains the value marked

###  Health Score

43

—

FairBetter than 91% of packages

Maintenance58

Moderate activity, may be stable

Popularity27

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 98.4% 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

3643d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4569979f10840ba772efe51b62fc0ad587d2f8bfe02277aa910db1e0563ae2df?d=identicon)[cvweiss](/maintainers/cvweiss)

---

Top Contributors

[![cvweiss](https://avatars.githubusercontent.com/u/739285?v=4)](https://github.com/cvweiss "cvweiss (120 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")[![iaglet](https://avatars.githubusercontent.com/u/35050305?v=4)](https://github.com/iaglet "iaglet (1 commits)")

### Embed Badge

![Health badge](/badges/zkillboard-redisq/health.svg)

```
[![Health](https://phpackages.com/badges/zkillboard-redisq/health.svg)](https://phpackages.com/packages/zkillboard-redisq)
```

PHPackages © 2026

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