https://github.com/zkillboard/redisq
A simple queue service for "pushing" killmails from zKillboard.
https://github.com/zkillboard/redisq
Last synced: 3 months ago
JSON representation
A simple queue service for "pushing" killmails from zKillboard.
- Host: GitHub
- URL: https://github.com/zkillboard/redisq
- Owner: zKillboard
- License: other
- Created: 2015-06-30T14:21:55.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2026-03-19T17:03:00.000Z (4 months ago)
- Last Synced: 2026-03-20T08:55:27.611Z (4 months ago)
- Language: JavaScript
- Homepage: https://zkillredisq.stream/listen.php
- Size: 165 KB
- Stars: 46
- Watchers: 10
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
> [!IMPORTANT]
> # π¨RedisQ will be sunsetted on May 31, 2026
Please see https://github.com/zKillboard/zKillboard/wiki/API-(R2Z2) for information on the replacement.
===
# RedisQ
A simple queue service using Redis as the backend. All you have to do is point your code to https://zkillredisq.stream/listen.php. 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?
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?
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?
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?
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
- 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
###### 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 https://zkillredisq.stream/listen.php, 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?
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?
(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?
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?
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?
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?
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?
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?
The URL was changed in May, 2025 to zkillredisq.stream.
###### 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
## 1. Operators
- `=` : equals
- `!=` : not equals
- `<` : less than
- `<=` : less than or equal
- `>` : greater than
- `>=` : greater than or equal
## 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
- 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
- `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