solid-redis 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +47 -43
- data/lib/solid_redis/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6535a0060c982d888022b36257c3fd25899961583e9ecd9033ec56852e11fc39
|
|
4
|
+
data.tar.gz: fabf7a71f4c204002e5f4a8f54f3a9666b9004fb20fd642eb56295ed2694aca6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e4c26409524aeb11b8d788f1f59babe79854679f9eb5527246d0921d23d4e71be3463f6dab6782d3de62db0da18945e9a2631265544d6d3bbf51dcc92004fccd
|
|
7
|
+
data.tar.gz: d369d2a83f623f929dc56277694c66251d2ff40c615ab8a374e01d31be39efc1b5f88dd217bb31a0c831133866fd6ac5bec9d507a954c2e182267e641c1f0cad
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@ All notable changes to this project are documented in this file. The format
|
|
|
4
4
|
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the
|
|
5
5
|
project adheres to [Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [1.0.5] - 2026-09-28
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Publish the final six-run benchmark matrix for GET/SET, pipelines,
|
|
12
|
+
Ractor-local pools, Cluster, and forced Sentinel failover using SolidRedis
|
|
13
|
+
1.0.4.
|
|
14
|
+
- Make the Sentinel benchmark more reliable with bounded reconnect backoff,
|
|
15
|
+
post-failover recovery validation, and ports outside the ephemeral range.
|
|
16
|
+
|
|
7
17
|
## [1.0.4] - 2026-09-27
|
|
8
18
|
|
|
9
19
|
### Changed
|
|
@@ -113,6 +123,7 @@ project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
113
123
|
TLS, reconnection), `Pool` owned by a single Ractor, pipelines, and
|
|
114
124
|
lifecycle callbacks via `callback-collection`.
|
|
115
125
|
|
|
126
|
+
[1.0.5]: https://github.com/nicolasva/solid-redis/compare/v1.0.4...v1.0.5
|
|
116
127
|
[1.0.4]: https://github.com/nicolasva/solid-redis/compare/v1.0.3...v1.0.4
|
|
117
128
|
[1.0.3]: https://github.com/nicolasva/solid-redis/compare/v1.0.2...v1.0.3
|
|
118
129
|
[1.0.2]: https://github.com/nicolasva/solid-redis/compare/v1.0.1...v1.0.2
|
data/README.md
CHANGED
|
@@ -592,26 +592,30 @@ Cluster rows compare `solid-redis` with `redis-cluster-client`, the
|
|
|
592
592
|
Cluster implementation built on `redis-client`. Unsupported combinations
|
|
593
593
|
are reported rather than replaced with a different concurrency model.
|
|
594
594
|
|
|
595
|
-
**Environment:** Ruby 3.4.4 (arm64-darwin24); solid-redis 1.0.
|
|
595
|
+
**Environment:** Ruby 3.4.4 (arm64-darwin24); solid-redis 1.0.4; Redis server v=8.10.0 sha=00000000:1 malloc=libc bits=64 build=80fd3081013fc32b; redis-client 0.30.1; redis-cluster-client 0.17.1; Apple M2 Max, 12 logical CPUs, 96 GiB RAM, macOS 26.6.2.
|
|
596
596
|
|
|
597
597
|
Each row is measured in a fresh Ruby process. Both clients use RESP2,
|
|
598
598
|
identical commands and the same local Redis topology. Client order is
|
|
599
|
-
alternated between runs; values are medians of
|
|
599
|
+
alternated between runs; values are medians of 6 runs.
|
|
600
600
|
Regular workloads warm for 2 seconds and measure
|
|
601
601
|
for 10 seconds. Pipeline latency is amortized
|
|
602
602
|
per command (batch size 50). The isolated-pool scenario creates a
|
|
603
603
|
five-connection pool inside each Ractor, warms it with
|
|
604
|
-
1,000 PINGs, then measures
|
|
604
|
+
1,000 PINGs, then measures
|
|
605
|
+
100,000
|
|
605
606
|
PINGs per Ractor.
|
|
606
607
|
CPU is client-process CPU divided by wall time and may exceed 100% with
|
|
607
608
|
multiple Ractors. Peak RSS excludes Redis server processes. Sentinel
|
|
608
609
|
rows kill the master process 0.5 seconds after measurement starts and
|
|
609
610
|
verify that every Ractor resumes on the promoted replica. Recovery is
|
|
610
|
-
measured from
|
|
611
|
+
measured from each Ractor's first observed failure to its next successful
|
|
612
|
+
response; failed commands are retried after a 10 ms backoff.
|
|
611
613
|
Throughput counts successful commands; errors are failed commands
|
|
612
|
-
observed during the measured interval.
|
|
613
|
-
include the identical latency
|
|
614
|
-
they are comparative rather than
|
|
614
|
+
observed during the measured interval.
|
|
615
|
+
Allocation and RSS measurements include the identical sampled-latency
|
|
616
|
+
harness used for both clients, so they are comparative rather than
|
|
617
|
+
intrinsic library-only costs. `redis-cluster-client` uses its default
|
|
618
|
+
synchronous routing model (`concurrency: { model: :none }`).
|
|
615
619
|
|
|
616
620
|
Reproduce the full run (requires `redis-server` and `redis-cli`):
|
|
617
621
|
|
|
@@ -623,66 +627,66 @@ BENCHMARK_README=README.md bundle exec rake benchmark:comparison
|
|
|
623
627
|
|
|
624
628
|
| Ractors | Client | Throughput (ops/s) | p50 (ms) | p95 (ms) | p99 (ms) | CPU | Peak RSS | Allocations/op | Errors/run |
|
|
625
629
|
|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
|
626
|
-
| 1 | `redis-client` | 35,
|
|
627
|
-
| 1 | `solid-redis` |
|
|
628
|
-
| 2 | `redis-client` | 53,
|
|
629
|
-
| 2 | `solid-redis` |
|
|
630
|
-
| 4 | `redis-client` | 67,
|
|
631
|
-
| 4 | `solid-redis` | 75,
|
|
632
|
-
| 8 | `redis-client` | 48,
|
|
633
|
-
| 8 | `solid-redis` |
|
|
630
|
+
| 1 | `redis-client` | 35,363 | 0.028 | 0.035 | 0.045 | 58.6% | 37.9 MiB | 17.4 | 0 |
|
|
631
|
+
| 1 | `solid-redis` | 39,259 | 0.025 | 0.032 | 0.044 | 65.0% | 54.5 MiB | 19.9 | 0 |
|
|
632
|
+
| 2 | `redis-client` | 53,847 | 0.036 | 0.050 | 0.073 | 114.4% | 38.0 MiB | 17.3 | 0 |
|
|
633
|
+
| 2 | `solid-redis` | 58,259 | 0.033 | 0.047 | 0.095 | 112.6% | 54.5 MiB | 19.8 | 0 |
|
|
634
|
+
| 4 | `redis-client` | 67,086 | 0.058 | 0.097 | 0.136 | 238.4% | 38.0 MiB | 17.3 | 0 |
|
|
635
|
+
| 4 | `solid-redis` | 75,789 | 0.049 | 0.081 | 0.170 | 220.7% | 55.3 MiB | 19.6 | 0 |
|
|
636
|
+
| 8 | `redis-client` | 48,938 | 0.083 | 0.180 | 0.249 | 267.7% | 38.7 MiB | 17.3 | 0 |
|
|
637
|
+
| 8 | `solid-redis` | 84,294 | 0.085 | 0.169 | 0.274 | 479.1% | 65.1 MiB | 19.0 | 0 |
|
|
634
638
|
|
|
635
639
|
### Pipelines
|
|
636
640
|
|
|
637
641
|
| Ractors | Client | Throughput (ops/s) | p50 (ms) | p95 (ms) | p99 (ms) | CPU | Peak RSS | Allocations/op | Errors/run |
|
|
638
642
|
|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
|
639
|
-
| 1 | `redis-client` |
|
|
640
|
-
| 1 | `solid-redis` |
|
|
641
|
-
| 2 | `redis-client` |
|
|
642
|
-
| 2 | `solid-redis` |
|
|
643
|
-
| 4 | `redis-client` |
|
|
644
|
-
| 4 | `solid-redis` |
|
|
645
|
-
| 8 | `redis-client` | 204,
|
|
646
|
-
| 8 | `solid-redis` |
|
|
643
|
+
| 1 | `redis-client` | 261,689 | 0.004 | 0.005 | 0.007 | 81.0% | 37.9 MiB | 12.6 | 0 |
|
|
644
|
+
| 1 | `solid-redis` | 329,512 | 0.003 | 0.004 | 0.005 | 76.8% | 40.5 MiB | 12.2 | 0 |
|
|
645
|
+
| 2 | `redis-client` | 273,064 | 0.007 | 0.009 | 0.012 | 147.4% | 38.0 MiB | 12.5 | 0 |
|
|
646
|
+
| 2 | `solid-redis` | 509,797 | 0.004 | 0.005 | 0.007 | 149.0% | 40.7 MiB | 12.0 | 0 |
|
|
647
|
+
| 4 | `redis-client` | 226,198 | 0.017 | 0.023 | 0.029 | 282.3% | 38.3 MiB | 12.5 | 0 |
|
|
648
|
+
| 4 | `solid-redis` | 609,096 | 0.006 | 0.011 | 0.013 | 272.3% | 41.0 MiB | 11.7 | 0 |
|
|
649
|
+
| 8 | `redis-client` | 204,166 | 0.004 | 0.054 | 0.062 | 315.5% | 38.9 MiB | 12.5 | 0 |
|
|
650
|
+
| 8 | `solid-redis` | 420,118 | 0.017 | 0.029 | 0.034 | 559.2% | 41.6 MiB | 11.6 | 0 |
|
|
647
651
|
|
|
648
652
|
### Isolated pool per Ractor
|
|
649
653
|
|
|
650
654
|
| Ractors | Client | Throughput (ops/s) | p50 (ms) | p95 (ms) | p99 (ms) | CPU | Peak RSS | Allocations/op | Errors/run |
|
|
651
655
|
|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
|
652
656
|
| 1 | `redis-client` | unsupported: Ractor::IsolationError (`connection_pool` uses non-shareable global state) | — | — | — | — | — | — | — |
|
|
653
|
-
| 1 | `solid-redis` |
|
|
657
|
+
| 1 | `solid-redis` | 40,785 | 0.023 | 0.031 | 0.053 | 66.6% | 55.2 MiB | 17.0 | 0 |
|
|
654
658
|
| 2 | `redis-client` | unsupported: Ractor::IsolationError (`connection_pool` uses non-shareable global state) | — | — | — | — | — | — | — |
|
|
655
|
-
| 2 | `solid-redis` |
|
|
659
|
+
| 2 | `solid-redis` | 63,540 | 0.030 | 0.042 | 0.073 | 117.0% | 55.3 MiB | 16.9 | 0 |
|
|
656
660
|
| 4 | `redis-client` | unsupported: Ractor::IsolationError (`connection_pool` uses non-shareable global state) | — | — | — | — | — | — | — |
|
|
657
|
-
| 4 | `solid-redis` |
|
|
661
|
+
| 4 | `solid-redis` | 80,969 | 0.046 | 0.072 | 0.160 | 221.7% | 54.8 MiB | 16.6 | 0 |
|
|
658
662
|
| 8 | `redis-client` | unsupported: Ractor::IsolationError (`connection_pool` uses non-shareable global state) | — | — | — | — | — | — | — |
|
|
659
|
-
| 8 | `solid-redis` |
|
|
663
|
+
| 8 | `solid-redis` | 74,339 | 0.068 | 0.163 | 0.351 | 334.1% | 62.3 MiB | 16.3 | 0 |
|
|
660
664
|
|
|
661
665
|
### Cluster
|
|
662
666
|
|
|
663
667
|
| Ractors | Client | Throughput (ops/s) | p50 (ms) | p95 (ms) | p99 (ms) | CPU | Peak RSS | Allocations/op | Errors/run |
|
|
664
668
|
|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
|
665
|
-
| 1 | `redis-client` |
|
|
666
|
-
| 1 | `solid-redis` | 29,
|
|
667
|
-
| 2 | `redis-client` |
|
|
668
|
-
| 2 | `solid-redis` | 51,
|
|
669
|
-
| 4 | `redis-client` | 60,
|
|
670
|
-
| 4 | `solid-redis` | 66,
|
|
671
|
-
| 8 | `redis-client` | 43,
|
|
672
|
-
| 8 | `solid-redis` |
|
|
669
|
+
| 1 | `redis-client` | 28,804 | 0.034 | 0.042 | 0.059 | 64.2% | 38.4 MiB | 19.4 | 0 |
|
|
670
|
+
| 1 | `solid-redis` | 29,651 | 0.032 | 0.040 | 0.065 | 63.1% | 54.1 MiB | 24.9 | 0 |
|
|
671
|
+
| 2 | `redis-client` | 49,533 | 0.039 | 0.055 | 0.091 | 124.1% | 37.6 MiB | 19.3 | 0 |
|
|
672
|
+
| 2 | `solid-redis` | 51,253 | 0.037 | 0.052 | 0.105 | 121.0% | 54.2 MiB | 24.8 | 0 |
|
|
673
|
+
| 4 | `redis-client` | 60,385 | 0.064 | 0.103 | 0.149 | 251.9% | 40.2 MiB | 19.3 | 0 |
|
|
674
|
+
| 4 | `solid-redis` | 66,630 | 0.056 | 0.088 | 0.175 | 242.5% | 57.2 MiB | 24.5 | 0 |
|
|
675
|
+
| 8 | `redis-client` | 43,361 | 0.095 | 0.195 | 0.275 | 277.5% | 44.0 MiB | 19.3 | 0 |
|
|
676
|
+
| 8 | `solid-redis` | 47,102 | 0.077 | 0.198 | 0.415 | 251.3% | 58.0 MiB | 24.2 | 0 |
|
|
673
677
|
|
|
674
678
|
### Sentinel master crash
|
|
675
679
|
|
|
676
680
|
| Ractors | Client | Throughput (ops/s) | p50 (ms) | p95 (ms) | p99 (ms) | Recovery p50 (ms) | Recovery max (ms) | CPU | Peak RSS | Allocations/op | Errors/run |
|
|
677
681
|
|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
|
|
678
|
-
| 1 | `redis-client` | 29,
|
|
679
|
-
| 1 | `solid-redis` |
|
|
680
|
-
| 2 | `redis-client` |
|
|
681
|
-
| 2 | `solid-redis` |
|
|
682
|
-
| 4 | `redis-client` |
|
|
683
|
-
| 4 | `solid-redis` |
|
|
684
|
-
| 8 | `redis-client` |
|
|
685
|
-
| 8 | `solid-redis` |
|
|
682
|
+
| 1 | `redis-client` | 29,749 | 0.028 | 0.037 | 0.052 | 1321.9 | 1321.9 | 52.8% | 41.9 MiB | 17.6 | 99 |
|
|
683
|
+
| 1 | `solid-redis` | 32,279 | 0.026 | 0.034 | 0.050 | 1313.3 | 1313.3 | 57.0% | 69.5 MiB | 20.1 | 96 |
|
|
684
|
+
| 2 | `redis-client` | 46,483 | 0.036 | 0.050 | 0.075 | 1307.7 | 1311.9 | 101.9% | 42.0 MiB | 17.5 | 202 |
|
|
685
|
+
| 2 | `solid-redis` | 50,273 | 0.033 | 0.045 | 0.098 | 1344.3 | 1344.4 | 99.5% | 69.6 MiB | 20.0 | 206 |
|
|
686
|
+
| 4 | `redis-client` | 58,224 | 0.058 | 0.095 | 0.132 | 1319.1 | 1319.1 | 212.7% | 41.8 MiB | 17.6 | 386 |
|
|
687
|
+
| 4 | `solid-redis` | 66,969 | 0.049 | 0.078 | 0.154 | 1341.8 | 1341.8 | 196.9% | 69.4 MiB | 19.9 | 398 |
|
|
688
|
+
| 8 | `redis-client` | 53,640 | 0.124 | 0.229 | 0.305 | 1342.8 | 1343.1 | 474.6% | 42.2 MiB | 17.7 | 679 |
|
|
689
|
+
| 8 | `solid-redis` | 72,816 | 0.086 | 0.172 | 0.289 | 1349.4 | 1353.1 | 421.7% | 64.5 MiB | 19.5 | 687 |
|
|
686
690
|
<!-- benchmark-results:end -->
|
|
687
691
|
|
|
688
692
|
## Development
|
data/lib/solid_redis/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: solid-redis
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nicolas Vandenbogaerde
|
|
@@ -132,7 +132,7 @@ licenses:
|
|
|
132
132
|
- MIT
|
|
133
133
|
metadata:
|
|
134
134
|
rubygems_mfa_required: 'true'
|
|
135
|
-
documentation_uri: https://www.rubydoc.info/gems/solid-redis/1.0.
|
|
135
|
+
documentation_uri: https://www.rubydoc.info/gems/solid-redis/1.0.5
|
|
136
136
|
source_code_uri: https://github.com/nicolasva/solid-redis
|
|
137
137
|
changelog_uri: https://github.com/nicolasva/solid-redis/blob/main/CHANGELOG.md
|
|
138
138
|
rdoc_options: []
|