dansan/jobboy-driver-redis
Redis driver for JobBoy, providing a Redis-backed process repository for storing and managing JobBoy processes. Use it to run JobBoy with Redis persistence and fast access. Full docs: jobboy-doc processrepository on Redis.
Installation
composer require dansan/jobboy-driver-redis
Ensure dansan/jobboy is also installed (this driver extends JobBoy).
Configuration
Add Redis connection details to your .env:
JOBBOY_REDIS_CONNECTION=redis
JOBBOY_REDIS_PREFIX=jobboy_
Ensure your config/jobboy.php includes:
'driver' => 'redis',
First Use Case Dispatch a job via Redis:
use Dansan\JobBoy\JobBoy;
use Dansan\JobBoy\Job;
$job = new Job('send-email', ['user_id' => 1]);
JobBoy::dispatch($job);
Verify jobs are queued in Redis using:
redis-cli LRANGE jobboy_queue:send-email 0 -1
Job Dispatching
JobBoy::dispatch() for synchronous enqueueing.JobBoy::dispatchLater() for delayed jobs:
JobBoy::dispatchLater($job, now()->addMinutes(5));
JobBoy::dispatchBatch() for bulk operations.Job Processing
artisan jobboy:work) to process jobs:
php artisan jobboy:work --queue=send-email --daemon
--limit=N to control job batch size (e.g., --limit=10).Job Retries
config/jobboy.php:
'redis' => [
'retry_after' => 60, // seconds
'max_retries' => 3,
],
jobboy_failed:{job_name}.Monitoring
jobboy:stats:{queue}: Job counts (pending, failed, processed).jobboy:delayed:{job_name}: Scheduled jobs.JobBoy::stats() in code:
$stats = JobBoy::stats('send-email');
JobBoy with custom middleware:
JobBoy::addMiddleware(\App\Jobs\LogJob::class);
JobStarted, JobFailed):
event(new JobStarted($job));
Mockery or Laravel’s RedisFake:
$this->app->singleton(Redis::class, function () {
return new RedisFake();
});
Connection Issues
redis-cli PING
JobBoy calls in try-catch:
try {
JobBoy::dispatch($job);
} catch (\RedisException $e) {
Log::error("Redis connection failed: " . $e->getMessage());
// Fallback to database driver or retry logic
}
Key Naming Collisions
jobboy_) may conflict with other Redis keys. Customize in .env:
JOBBOY_REDIS_PREFIX=myapp_jobboy_
:, $, \).Memory Management
jobboy_queue:{name}) grow indefinitely. Implement TTL for delayed jobs:
JobBoy::dispatchLater($job, now()->addHours(1), 3600); // TTL in seconds
redis-cli INFO memory
Daemon Stability
--daemon cautiously; crashes may leave jobs stuck. Run workers in a PM2/Supervisor process:
supervisorctl start jobboy-worker
Inspect Queues List all jobs in a queue:
redis-cli LRANGE jobboy_queue:send-email 0 -1
View delayed jobs:
redis-cli ZRANGE jobboy_delayed:send-email 0 -1 WITHSCORES
Log Failed Jobs Check failed jobs:
redis-cli LRANGE jobboy_failed:send-email 0 -1
Decode payloads with:
redis-cli GET jobboy_failed:send-email:123 | php -r 'echo json_decode($argn, true);'
Enable Debug Mode
Set JOBBOY_DEBUG=true in .env to log job lifecycle events to storage/logs/jobboy.log.
Custom Job Serialization Override serialization in a service provider:
JobBoy::extend('redis', function ($app) {
return new CustomRedisDriver($app['redis'], [
'serializer' => new \App\Jobs\JsonApiSerializer(),
]);
});
Queue Prioritization Use Redis sorted sets for priority queues:
JobBoy::dispatchPrioritized($job, 1); // Lower score = higher priority
Webhooks for Job Events Extend the driver to emit webhook notifications:
JobBoy::on('job.processed', function ($job) {
Http::post('https://your-webhook.com/jobs', ['job' => $job]);
});
Horizontal Scaling
Use Redis Cluster for multi-node setups. Configure in config/jobboy.php:
'redis' => [
'cluster' => true,
'options' => [
'cluster' => 'redis',
'parameters' => [
'cluster' => 'default',
'alias' => [
'redis' => [
'host' => ['redis1', 'redis2'],
'port' => 6379,
],
],
],
],
],
How can I help you explore Laravel packages today?