Skip to content

Commit baf8e39

Browse files
committed
Provides an alternative implementation on Redis Streams
Implements backlogs using streams rather than sorted sets. Streams do their own length limitation. See https://redis.io/topics/streams-intro.
1 parent 8eba0cb commit baf8e39

File tree

6 files changed

+473
-33
lines changed

6 files changed

+473
-33
lines changed

.rubocop_todo.yml

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This configuration was generated by
22
# `rubocop --auto-gen-config`
3-
# on 2018-11-07 23:41:56 +0000 using RuboCop version 0.60.0.
3+
# on 2018-11-08 00:58:02 +0000 using RuboCop version 0.60.0.
44
# The point is for the user to remove these configuration records
55
# one by one as the offenses are removed from the code base.
66
# Note that changes in the inspected code, or installation of new
@@ -54,12 +54,13 @@ Lint/LiteralAsCondition:
5454
Exclude:
5555
- 'examples/chat/chat.rb'
5656

57-
# Offense count: 3
57+
# Offense count: 4
5858
Lint/NonLocalExitFromIterator:
5959
Exclude:
6060
- 'lib/message_bus.rb'
6161
- 'lib/message_bus/backends/postgres.rb'
6262
- 'lib/message_bus/backends/redis.rb'
63+
- 'lib/message_bus/backends/redis_streams.rb'
6364

6465
# Offense count: 1
6566
# Cop supports --auto-correct.
@@ -78,7 +79,7 @@ Lint/StringConversionInInterpolation:
7879
Exclude:
7980
- 'spec/lib/message_bus/multi_process_spec.rb'
8081

81-
# Offense count: 30
82+
# Offense count: 36
8283
Metrics/AbcSize:
8384
Max: 112
8485

@@ -88,21 +89,21 @@ Metrics/AbcSize:
8889
Metrics/BlockLength:
8990
Max: 289
9091

91-
# Offense count: 3
92+
# Offense count: 4
9293
# Configuration parameters: CountBlocks.
9394
Metrics/BlockNesting:
9495
Max: 4
9596

96-
# Offense count: 8
97+
# Offense count: 10
9798
# Configuration parameters: CountComments.
9899
Metrics/ClassLength:
99-
Max: 307
100+
Max: 312
100101

101-
# Offense count: 18
102+
# Offense count: 21
102103
Metrics/CyclomaticComplexity:
103104
Max: 30
104105

105-
# Offense count: 39
106+
# Offense count: 46
106107
# Configuration parameters: CountComments, ExcludedMethods.
107108
Metrics/MethodLength:
108109
Max: 105
@@ -112,7 +113,7 @@ Metrics/MethodLength:
112113
Metrics/ModuleLength:
113114
Max: 415
114115

115-
# Offense count: 18
116+
# Offense count: 21
116117
Metrics/PerceivedComplexity:
117118
Max: 34
118119

@@ -124,7 +125,7 @@ Naming/MemoizedInstanceVariableName:
124125
- 'lib/message_bus.rb'
125126
- 'spec/assets/support/jasmine_helper.rb'
126127

127-
# Offense count: 2
128+
# Offense count: 3
128129
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros.
129130
# NamePrefix: is_, has_, have_
130131
# NamePrefixBlacklist: is_, has_, have_
@@ -135,6 +136,7 @@ Naming/PredicateName:
135136
- 'spec/**/*'
136137
- 'lib/message_bus.rb'
137138
- 'lib/message_bus/backends/redis.rb'
139+
- 'lib/message_bus/backends/redis_streams.rb'
138140

139141
# Offense count: 6
140142
# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
@@ -158,11 +160,12 @@ Performance/RedundantMerge:
158160
Exclude:
159161
- 'spec/spec_helper.rb'
160162

161-
# Offense count: 3
163+
# Offense count: 5
162164
# Cop supports --auto-correct.
163165
Performance/RegexpMatch:
164166
Exclude:
165167
- 'lib/message_bus/backends/redis.rb'
168+
- 'lib/message_bus/backends/redis_streams.rb'
166169
- 'lib/message_bus/rack/diagnostics.rb'
167170

168171
# Offense count: 1
@@ -211,7 +214,7 @@ Style/CaseEquality:
211214
- 'lib/message_bus/distributed_cache.rb'
212215
- 'spec/lib/message_bus/rack/middleware_spec.rb'
213216

214-
# Offense count: 24
217+
# Offense count: 26
215218
# Cop supports --auto-correct.
216219
# Configuration parameters: AutoCorrect, EnforcedStyle.
217220
# SupportedStyles: nested, compact
@@ -221,6 +224,7 @@ Style/ClassAndModuleChildren:
221224
- 'lib/message_bus/backends/memory.rb'
222225
- 'lib/message_bus/backends/postgres.rb'
223226
- 'lib/message_bus/backends/redis.rb'
227+
- 'lib/message_bus/backends/redis_streams.rb'
224228
- 'lib/message_bus/client.rb'
225229
- 'lib/message_bus/connection_manager.rb'
226230
- 'lib/message_bus/diagnostics.rb'
@@ -236,21 +240,22 @@ Style/ClassVars:
236240
Exclude:
237241
- 'lib/message_bus/rack/diagnostics.rb'
238242

239-
# Offense count: 3
243+
# Offense count: 4
240244
# Cop supports --auto-correct.
241245
# Configuration parameters: Keywords.
242246
# Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW
243247
Style/CommentAnnotation:
244248
Exclude:
245249
- 'lib/message_bus/backends/postgres.rb'
246250
- 'lib/message_bus/backends/redis.rb'
251+
- 'lib/message_bus/backends/redis_streams.rb'
247252
- 'lib/message_bus/rack/middleware.rb'
248253

249-
# Offense count: 33
254+
# Offense count: 37
250255
Style/Documentation:
251256
Enabled: false
252257

253-
# Offense count: 6
258+
# Offense count: 7
254259
# Cop supports --auto-correct.
255260
# Configuration parameters: EnforcedStyle.
256261
# SupportedStyles: empty, nil, both
@@ -260,6 +265,7 @@ Style/EmptyElse:
260265
- 'lib/message_bus/backends/memory.rb'
261266
- 'lib/message_bus/backends/postgres.rb'
262267
- 'lib/message_bus/backends/redis.rb'
268+
- 'lib/message_bus/backends/redis_streams.rb'
263269
- 'spec/lib/message_bus/backend_spec.rb'
264270

265271
# Offense count: 1
@@ -305,14 +311,15 @@ Style/GlobalVars:
305311
- 'examples/chat/chat.rb'
306312
- 'lib/message_bus/diagnostics.rb'
307313

308-
# Offense count: 12
314+
# Offense count: 15
309315
# Configuration parameters: MinBodyLength.
310316
Style/GuardClause:
311317
Exclude:
312318
- 'lib/message_bus.rb'
313319
- 'lib/message_bus/backends/memory.rb'
314320
- 'lib/message_bus/backends/postgres.rb'
315321
- 'lib/message_bus/backends/redis.rb'
322+
- 'lib/message_bus/backends/redis_streams.rb'
316323
- 'lib/message_bus/client.rb'
317324
- 'lib/message_bus/rack/middleware.rb'
318325

@@ -321,7 +328,7 @@ Style/IfInsideElse:
321328
Exclude:
322329
- 'lib/message_bus.rb'
323330

324-
# Offense count: 22
331+
# Offense count: 30
325332
# Cop supports --auto-correct.
326333
Style/IfUnlessModifier:
327334
Exclude:
@@ -330,6 +337,7 @@ Style/IfUnlessModifier:
330337
- 'lib/message_bus/backends/memory.rb'
331338
- 'lib/message_bus/backends/postgres.rb'
332339
- 'lib/message_bus/backends/redis.rb'
340+
- 'lib/message_bus/backends/redis_streams.rb'
333341
- 'lib/message_bus/client.rb'
334342
- 'lib/message_bus/rack/diagnostics.rb'
335343
- 'lib/message_bus/rack/middleware.rb'
@@ -362,11 +370,12 @@ Style/MutableConstant:
362370
- 'lib/message_bus/backends/postgres.rb'
363371
- 'spec/spec_helper.rb'
364372

365-
# Offense count: 2
373+
# Offense count: 3
366374
# Cop supports --auto-correct.
367375
Style/NegatedWhile:
368376
Exclude:
369377
- 'lib/message_bus/backends/redis.rb'
378+
- 'lib/message_bus/backends/redis_streams.rb'
370379
- 'lib/message_bus/timer_thread.rb'
371380

372381
# Offense count: 2
@@ -378,22 +387,23 @@ Style/Next:
378387
- 'lib/message_bus/connection_manager.rb'
379388
- 'lib/message_bus/timer_thread.rb'
380389

381-
# Offense count: 4
390+
# Offense count: 6
382391
# Cop supports --auto-correct.
383392
# Configuration parameters: EnforcedStyle.
384393
# SupportedStyles: predicate, comparison
385394
Style/NilComparison:
386395
Exclude:
387396
- 'lib/message_bus/backends/redis.rb'
397+
- 'lib/message_bus/backends/redis_streams.rb'
388398
- 'spec/lib/message_bus/distributed_cache_spec.rb'
389399

390-
# Offense count: 5
400+
# Offense count: 7
391401
# Cop supports --auto-correct.
392402
# Configuration parameters: Strict.
393403
Style/NumericLiterals:
394404
MinDigits: 15
395405

396-
# Offense count: 15
406+
# Offense count: 17
397407
# Cop supports --auto-correct.
398408
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
399409
# SupportedStyles: predicate, comparison
@@ -404,6 +414,7 @@ Style/NumericPredicate:
404414
- 'lib/message_bus/backends/memory.rb'
405415
- 'lib/message_bus/backends/postgres.rb'
406416
- 'lib/message_bus/backends/redis.rb'
417+
- 'lib/message_bus/backends/redis_streams.rb'
407418
- 'lib/message_bus/client.rb'
408419
- 'lib/message_bus/rack/middleware.rb'
409420
- 'lib/message_bus/timer_thread.rb'
@@ -423,20 +434,22 @@ Style/PercentLiteralDelimiters:
423434
- 'Guardfile'
424435
- 'message_bus.gemspec'
425436

426-
# Offense count: 2
437+
# Offense count: 3
427438
# Cop supports --auto-correct.
428439
# Configuration parameters: EnforcedStyle.
429440
# SupportedStyles: compact, exploded
430441
Style/RaiseArgs:
431442
Exclude:
432443
- 'lib/message_bus.rb'
433444
- 'lib/message_bus/backends/redis.rb'
445+
- 'lib/message_bus/backends/redis_streams.rb'
434446

435-
# Offense count: 3
447+
# Offense count: 4
436448
# Cop supports --auto-correct.
437449
Style/RedundantBegin:
438450
Exclude:
439451
- 'lib/message_bus/backends/redis.rb'
452+
- 'lib/message_bus/backends/redis_streams.rb'
440453
- 'lib/message_bus/diagnostics.rb'
441454

442455
# Offense count: 2
@@ -489,7 +502,7 @@ Style/RescueModifier:
489502
- 'lib/message_bus/client.rb'
490503
- 'lib/message_bus/connection_manager.rb'
491504

492-
# Offense count: 17
505+
# Offense count: 19
493506
# Cop supports --auto-correct.
494507
# Configuration parameters: EnforcedStyle.
495508
# SupportedStyles: implicit, explicit
@@ -500,6 +513,7 @@ Style/RescueStandardError:
500513
- 'lib/message_bus/backends/memory.rb'
501514
- 'lib/message_bus/backends/postgres.rb'
502515
- 'lib/message_bus/backends/redis.rb'
516+
- 'lib/message_bus/backends/redis_streams.rb'
503517
- 'lib/message_bus/client.rb'
504518
- 'lib/message_bus/connection_manager.rb'
505519
- 'lib/message_bus/diagnostics.rb'
@@ -540,7 +554,7 @@ Style/SpecialGlobalVars:
540554
- 'message_bus.gemspec'
541555
- 'spec/spec_helper.rb'
542556

543-
# Offense count: 647
557+
# Offense count: 658
544558
# Cop supports --auto-correct.
545559
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
546560
# SupportedStyles: single_quotes, double_quotes
@@ -639,16 +653,17 @@ Style/YodaCondition:
639653
Exclude:
640654
- 'spec/lib/message_bus/timer_thread_spec.rb'
641655

642-
# Offense count: 6
656+
# Offense count: 7
643657
# Cop supports --auto-correct.
644658
Style/ZeroLengthPredicate:
645659
Exclude:
646660
- 'lib/message_bus/backends/redis.rb'
661+
- 'lib/message_bus/backends/redis_streams.rb'
647662
- 'lib/message_bus/client.rb'
648663
- 'lib/message_bus/rack/middleware.rb'
649664
- 'spec/lib/message_bus_spec.rb'
650665

651-
# Offense count: 104
666+
# Offense count: 115
652667
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
653668
# URISchemes: http, https
654669
Metrics/LineLength:

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,8 @@ MessageBus.reliable_pub_sub.max_backlog_age = 100
323323

324324
```
325325

326+
The primary Redis-based implementation uses Redis PubSub and sorted sets. An alternative implementation based on [Redis Streams](https://redis.io/topics/streams-intro) (available in Redis 5.0) is available by setting `backend: :redis_streams`.
327+
326328
### PostgreSQL
327329

328330
message_bus also supports PostgreSQL as the backend:

Rakefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,18 @@ run_spec = proc do |backend|
3737
end
3838
end
3939

40-
task spec: [:spec_memory, :spec_redis, :spec_postgres, :spec_client_js, :rubocop]
40+
task spec: [:spec_memory, :spec_redis, :spec_redis_streams, :spec_postgres, :spec_client_js, :rubocop]
4141

4242
task spec_client_js: 'jasmine:ci'
4343

4444
task :spec_redis do
4545
run_spec.call('redis')
4646
end
4747

48+
task :spec_redis_streams do
49+
run_spec.call('redis_streams')
50+
end
51+
4852
task :spec_memory do
4953
run_spec.call('memory')
5054
end

0 commit comments

Comments
 (0)