Created
          February 9, 2023 10:32 
        
      - 
      
 - 
        
Save llk23r/bb069f48afb4f78efbeecca3f405d6c6 to your computer and use it in GitHub Desktop.  
    atomic vs pipelined hset
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | require "redis" | |
| require "benchmark" | |
| def setup | |
| @redis = Redis.new | |
| @redis.flushdb | |
| end | |
| def teardown | |
| @redis.flushdb | |
| @redis.quit | |
| end | |
| def atomic_hset | |
| setup | |
| n = 1_000_000 | |
| time = Benchmark.realtime do | |
| n.times do |i| | |
| @redis.hset("key#{i}", "field#{i}", "value#{i}") | |
| end | |
| end | |
| teardown | |
| puts "#{n} Atomic hset: #{time}s" | |
| end | |
| def pipelined_hset | |
| setup | |
| n = 1_000_000 | |
| time = Benchmark.realtime do | |
| @redis.pipelined do | |
| n.times do |i| | |
| @redis.hset("key#{i}", "field#{i}", "value#{i}") | |
| end | |
| end | |
| end | |
| teardown | |
| puts "#{n} Pipelined hset: #{time}s" | |
| end | |
| atomic_hset | |
| pipelined_hset | |
| # Performance Comparison: | |
| # | |
| # | Operation | Items | Time (s) | | |
| # |-----------|-------|----------| | |
| # | Atomic hset | 1 million | 397.95090500000515 | | |
| # | Pipelined hset | 1 million | 16.061125000000175 | | |
| # | |
| # Conclusion: | |
| # Pipelined hset is 24 times faster than atomic hset. | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment