Skip to content

Commit c927fdd

Browse files
committed
Extract Redis key generation to dedicated RedisKeys class
Removed duplicated key helper methods from 6 files and centralized them in a single RedisKeys class. This makes key generation consistent and easier to maintain. - Added src/Support/RedisKeys.php with all key generation methods - Updated BalancedRedisQueue, Metrics, SmartFairStrategy, and commands - Removed duplicated code
1 parent d908cf0 commit c927fdd

File tree

7 files changed

+148
-239
lines changed

7 files changed

+148
-239
lines changed

src/BalancedQueueManager.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,7 @@ protected function createSmartFairStrategy(array $config): SmartFairStrategy
182182
$config['boost_small_queues'] ?? true,
183183
$config['small_queue_threshold'] ?? 5,
184184
$config['boost_multiplier'] ?? 1.5,
185-
$this->getPrefix(),
186-
$config['metrics_key_prefix'] ?? 'balanced-queue:metrics'
185+
$this->getPrefix()
187186
);
188187
}
189188

src/Console/BalancedQueueClearCommand.php

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Illuminate\Console\Command;
88
use Illuminate\Support\Facades\Redis;
9+
use YanGusik\BalancedQueue\Support\RedisKeys;
910

1011
class BalancedQueueClearCommand extends Command
1112
{
@@ -16,11 +17,11 @@ class BalancedQueueClearCommand extends Command
1617

1718
protected $description = 'Clear balanced queue jobs';
1819

19-
protected string $prefix;
20+
protected RedisKeys $keys;
2021

2122
public function handle(): int
2223
{
23-
$this->prefix = config('balanced-queue.redis.prefix', 'balanced-queue');
24+
$this->keys = new RedisKeys(config('balanced-queue.redis.prefix', 'balanced-queue'));
2425
$queueName = $this->argument('queue');
2526
$partition = $this->option('partition');
2627
$force = $this->option('force');
@@ -36,10 +37,10 @@ public function handle(): int
3637

3738
protected function clearPartition($redis, string $queueName, string $partition, bool $force): int
3839
{
39-
$queueListKey = $this->getPartitionQueueKey($queueName, $partition);
40-
$activeKey = $this->getActiveKey($queueName, $partition);
41-
$metricsKey = $this->getMetricsKey($queueName, $partition);
42-
$partitionsKey = $this->getPartitionsKey($queueName);
40+
$queueListKey = $this->keys->partitionQueue($queueName, $partition);
41+
$activeKey = $this->keys->active($queueName, $partition);
42+
$metricsKey = $this->keys->metrics($queueName, $partition);
43+
$partitionsKey = $this->keys->partitions($queueName);
4344

4445
$pending = (int) $redis->llen($queueListKey);
4546
$active = (int) $redis->hlen($activeKey);
@@ -71,7 +72,7 @@ protected function clearPartition($redis, string $queueName, string $partition,
7172

7273
protected function clearAll($redis, string $queueName, bool $force): int
7374
{
74-
$partitionsKey = $this->getPartitionsKey($queueName);
75+
$partitionsKey = $this->keys->partitions($queueName);
7576
$partitions = $redis->smembers($partitionsKey);
7677

7778
if (empty($partitions)) {
@@ -84,8 +85,8 @@ protected function clearAll($redis, string $queueName, bool $force): int
8485
$partitionStats = [];
8586

8687
foreach ($partitions as $partition) {
87-
$queueListKey = $this->getPartitionQueueKey($queueName, $partition);
88-
$activeKey = $this->getActiveKey($queueName, $partition);
88+
$queueListKey = $this->keys->partitionQueue($queueName, $partition);
89+
$activeKey = $this->keys->active($queueName, $partition);
8990

9091
$pending = (int) $redis->llen($queueListKey);
9192
$active = (int) $redis->hlen($activeKey);
@@ -116,49 +117,19 @@ protected function clearAll($redis, string $queueName, bool $force): int
116117

117118
// Clear all
118119
foreach ($partitions as $partition) {
119-
$redis->del($this->getPartitionQueueKey($queueName, $partition));
120-
$redis->del($this->getActiveKey($queueName, $partition));
121-
$redis->del($this->getDelayedKey($queueName, $partition));
122-
$redis->del($this->getMetricsKey($queueName, $partition));
120+
$redis->del($this->keys->partitionQueue($queueName, $partition));
121+
$redis->del($this->keys->active($queueName, $partition));
122+
$redis->del($this->keys->delayed($queueName, $partition));
123+
$redis->del($this->keys->metrics($queueName, $partition));
123124
}
124125

125126
$redis->del($partitionsKey);
126127

127-
// Clear round-robin state (uses queueName without 'queues:' prefix)
128-
$rrStateKey = "{$this->prefix}:rr-state:{$queueName}";
129-
$redis->del($rrStateKey);
128+
// Clear round-robin state
129+
$redis->del($this->keys->roundRobinState($queueName));
130130

131131
$this->info("✓ Cleared {$totalPending} pending and {$totalActive} active jobs from " . count($partitions) . " partitions.");
132132

133133
return Command::SUCCESS;
134134
}
135-
136-
// =========================================================================
137-
// Redis Key Helpers (mirrors BalancedRedisQueue)
138-
// =========================================================================
139-
140-
protected function getPartitionsKey(string $queueName): string
141-
{
142-
return "{$this->prefix}:queues:{$queueName}:partitions";
143-
}
144-
145-
protected function getPartitionQueueKey(string $queueName, string $partition): string
146-
{
147-
return "{$this->prefix}:queues:{$queueName}:{$partition}";
148-
}
149-
150-
protected function getActiveKey(string $queueName, string $partition): string
151-
{
152-
return "{$this->prefix}:queues:{$queueName}:{$partition}:active";
153-
}
154-
155-
protected function getMetricsKey(string $queueName, string $partition): string
156-
{
157-
return "{$this->prefix}:metrics:{$queueName}:{$partition}";
158-
}
159-
160-
protected function getDelayedKey(string $queueName, string $partition): string
161-
{
162-
return "{$this->prefix}:queues:{$queueName}:{$partition}:delayed";
163-
}
164135
}

src/Console/BalancedQueueTableCommand.php

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Illuminate\Console\Command;
88
use Illuminate\Support\Facades\Redis;
99
use YanGusik\BalancedQueue\Support\Metrics;
10+
use YanGusik\BalancedQueue\Support\RedisKeys;
1011

1112
class BalancedQueueTableCommand extends Command
1213
{
@@ -18,11 +19,11 @@ class BalancedQueueTableCommand extends Command
1819

1920
protected $description = 'Display balanced queue statistics';
2021

21-
protected string $prefix;
22+
protected RedisKeys $keys;
2223

2324
public function handle(): int
2425
{
25-
$this->prefix = config('balanced-queue.redis.prefix', 'balanced-queue');
26+
$this->keys = new RedisKeys(config('balanced-queue.redis.prefix', 'balanced-queue'));
2627
$showAll = $this->option('all');
2728
$watch = $this->option('watch');
2829
$interval = (int) $this->option('interval');
@@ -53,7 +54,7 @@ public function handle(): int
5354
*/
5455
protected function getAllQueues(): array
5556
{
56-
$metrics = new Metrics(Redis::connection(config('balanced-queue.redis.connection')), $this->prefix);
57+
$metrics = new Metrics(Redis::connection(config('balanced-queue.redis.connection')), $this->keys->getPrefix());
5758

5859
return $metrics->getAllQueues();
5960
}
@@ -118,7 +119,7 @@ protected function displayTable(string $queueName): void
118119
$redis = Redis::connection(config('balanced-queue.redis.connection'));
119120

120121
// Get all partitions
121-
$partitionsKey = $this->getPartitionsKey($queueName);
122+
$partitionsKey = $this->keys->partitions($queueName);
122123
$partitions = $redis->smembers($partitionsKey);
123124

124125
if (empty($partitions)) {
@@ -131,9 +132,9 @@ protected function displayTable(string $queueName): void
131132
$rows = [];
132133

133134
foreach ($partitions as $partition) {
134-
$queueListKey = $this->getPartitionQueueKey($queueName, $partition);
135-
$activeKey = $this->getActiveKey($queueName, $partition);
136-
$metricsKey = $this->getMetricsKey($queueName, $partition);
135+
$queueListKey = $this->keys->partitionQueue($queueName, $partition);
136+
$activeKey = $this->keys->active($queueName, $partition);
137+
$metricsKey = $this->keys->metrics($queueName, $partition);
137138

138139
$pending = (int) $redis->llen($queueListKey);
139140
$active = (int) $redis->hlen($activeKey);
@@ -208,28 +209,4 @@ protected function formatActive(int $num): string
208209

209210
return "<fg=green>{$num}</>";
210211
}
211-
212-
// =========================================================================
213-
// Redis Key Helpers (mirrors BalancedRedisQueue)
214-
// =========================================================================
215-
216-
protected function getPartitionsKey(string $queueName): string
217-
{
218-
return "{$this->prefix}:queues:{$queueName}:partitions";
219-
}
220-
221-
protected function getPartitionQueueKey(string $queueName, string $partition): string
222-
{
223-
return "{$this->prefix}:queues:{$queueName}:{$partition}";
224-
}
225-
226-
protected function getActiveKey(string $queueName, string $partition): string
227-
{
228-
return "{$this->prefix}:queues:{$queueName}:{$partition}:active";
229-
}
230-
231-
protected function getMetricsKey(string $queueName, string $partition): string
232-
{
233-
return "{$this->prefix}:metrics:{$queueName}:{$partition}";
234-
}
235212
}

0 commit comments

Comments
 (0)