Skip to content

Commit 3c669f4

Browse files
committed
RESP3: Pre-freeze hash keys
This saves Ruby from needing to make a frozen copy of the string keys.
1 parent 912810b commit 3c669f4

File tree

4 files changed

+30
-30
lines changed

4 files changed

+30
-30
lines changed

benchmark/drivers.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
x.report("ruby") { ruby.pipelined { |p| 100.times { p.call("GET", "key") } } }
1818
end
1919

20-
benchmark("large string x 100") do |x|
21-
x.report("hiredis") { hiredis.pipelined { |p| 100.times { p.call("GET", "large") } } }
22-
x.report("ruby") { ruby.pipelined { |p| 100.times { p.call("GET", "large") } } }
20+
benchmark("large string") do |x|
21+
x.report("hiredis") { hiredis.call("GET", "large") }
22+
x.report("ruby") { ruby.call("GET", "large") }
2323
end
2424

2525
benchmark("small list x 100") do |x|

benchmark/drivers_ruby.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,53 +7,53 @@ redis-server: `Redis server v=7.0.12 sha=00000000:0 malloc=libc bits=64 build=a1
77

88
```
99
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) [arm64-darwin23]
10-
hiredis: 4825.5 i/s
11-
ruby: 2863.4 i/s - 1.69x slower
10+
hiredis: 5239.0 i/s
11+
ruby: 2957.4 i/s - 1.77x slower
1212
1313
```
1414

15-
### large string x 100
15+
### large string
1616

1717
```
1818
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) [arm64-darwin23]
19-
hiredis: 266.6 i/s
20-
ruby: 198.1 i/s - 1.35x slower
19+
hiredis: 12784.9 i/s
20+
ruby: 14948.2 i/s - same-ish: difference falls within error
2121
2222
```
2323

2424
### small list x 100
2525

2626
```
2727
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) [arm64-darwin23]
28-
hiredis: 2416.9 i/s
29-
ruby: 1223.3 i/s - 1.98x slower
28+
hiredis: 2599.3 i/s
29+
ruby: 1300.0 i/s - 2.00x slower
3030
3131
```
3232

3333
### large list
3434

3535
```
3636
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) [arm64-darwin23]
37-
hiredis: 5351.6 i/s
38-
ruby: 1718.0 i/s - 3.11x slower
37+
hiredis: 6836.0 i/s
38+
ruby: 1867.6 i/s - 3.66x slower
3939
4040
```
4141

4242
### small hash x 100
4343

4444
```
4545
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) [arm64-darwin23]
46-
hiredis: 2854.3 i/s
47-
ruby: 1294.4 i/s - 2.21x slower
46+
hiredis: 3392.5 i/s
47+
ruby: 1408.9 i/s - 2.41x slower
4848
4949
```
5050

5151
### large hash
5252

5353
```
5454
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) [arm64-darwin23]
55-
hiredis: 1580.6 i/s
56-
ruby: 1634.7 i/s - same-ish: difference falls within error
55+
hiredis: 1786.2 i/s
56+
ruby: 1811.9 i/s - same-ish: difference falls within error
5757
5858
```
5959

benchmark/drivers_yjit.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,53 +7,53 @@ redis-server: `Redis server v=7.0.12 sha=00000000:0 malloc=libc bits=64 build=a1
77

88
```
99
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) +YJIT [arm64-darwin23]
10-
hiredis: 6407.8 i/s
11-
ruby: 5852.0 i/s - same-ish: difference falls within error
10+
hiredis: 7148.9 i/s
11+
ruby: 5758.6 i/s - 1.24x slower
1212
1313
```
1414

15-
### large string x 100
15+
### large string
1616

1717
```
1818
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) +YJIT [arm64-darwin23]
19-
hiredis: 302.8 i/s
20-
ruby: 337.3 i/s - same-ish: difference falls within error
19+
hiredis: 13023.5 i/s
20+
ruby: 20246.4 i/s - 1.55x faster
2121
2222
```
2323

2424
### small list x 100
2525

2626
```
2727
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) +YJIT [arm64-darwin23]
28-
hiredis: 4067.7 i/s
29-
ruby: 2721.5 i/s - 1.49x slower
28+
hiredis: 3973.6 i/s
29+
ruby: 2668.7 i/s - 1.49x slower
3030
3131
```
3232

3333
### large list
3434

3535
```
3636
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) +YJIT [arm64-darwin23]
37-
hiredis: 7138.7 i/s
38-
ruby: 6605.4 i/s - same-ish: difference falls within error
37+
hiredis: 6706.8 i/s
38+
ruby: 6529.3 i/s - same-ish: difference falls within error
3939
4040
```
4141

4242
### small hash x 100
4343

4444
```
4545
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) +YJIT [arm64-darwin23]
46-
hiredis: 4219.8 i/s
47-
ruby: 3586.4 i/s - 1.18x slower
46+
hiredis: 4001.6 i/s
47+
ruby: 3482.9 i/s - 1.15x slower
4848
4949
```
5050

5151
### large hash
5252

5353
```
5454
ruby 3.4.0dev (2024-03-19T14:18:56Z master 5c2937733c) +YJIT [arm64-darwin23]
55-
hiredis: 5240.9 i/s
56-
ruby: 5312.5 i/s - same-ish: difference falls within error
55+
hiredis: 5511.9 i/s
56+
ruby: 5555.7 i/s - same-ish: difference falls within error
5757
5858
```
5959

lib/redis_client/ruby_connection/resp3.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def parse_set(io)
174174
def parse_map(io)
175175
hash = {}
176176
io.gets_integer.times do
177-
hash[parse(io)] = parse(io)
177+
hash[parse(io).freeze] = parse(io)
178178
end
179179
hash
180180
end

0 commit comments

Comments
 (0)