You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							243 lines
						
					
					
						
							6.9 KiB
						
					
					
				
			
		
		
	
	
							243 lines
						
					
					
						
							6.9 KiB
						
					
					
				require 'helper'
 | 
						|
require 'benchmark'
 | 
						|
require 'active_support/cache/dalli_store'
 | 
						|
 | 
						|
describe 'performance' do
 | 
						|
  before do
 | 
						|
    puts "Testing #{Dalli::VERSION} with #{RUBY_DESCRIPTION}"
 | 
						|
    # We'll use a simple @value to try to avoid spending time in Marshal,
 | 
						|
    # which is a constant penalty that both clients have to pay
 | 
						|
    @value = []
 | 
						|
    @marshalled = Marshal.dump(@value)
 | 
						|
 | 
						|
    @servers = ['127.0.0.1:19122', 'localhost:19122']
 | 
						|
    @key1 = "Short"
 | 
						|
    @key2 = "Sym1-2-3::45"*8
 | 
						|
    @key3 = "Long"*40
 | 
						|
    @key4 = "Medium"*8
 | 
						|
    # 5 and 6 are only used for multiget miss test
 | 
						|
    @key5 = "Medium2"*8
 | 
						|
    @key6 = "Long3"*40
 | 
						|
    @counter = 'counter'
 | 
						|
  end
 | 
						|
 | 
						|
  it 'runs benchmarks' do
 | 
						|
    memcached do
 | 
						|
 | 
						|
      Benchmark.bm(37) do |x|
 | 
						|
 | 
						|
        n = 2500
 | 
						|
 | 
						|
        @ds = ActiveSupport::Cache::DalliStore.new(@servers)
 | 
						|
        x.report("mixed:rails:dalli") do
 | 
						|
          n.times do
 | 
						|
            @ds.read @key1
 | 
						|
            @ds.write @key2, @value
 | 
						|
            @ds.fetch(@key3) { @value }
 | 
						|
            @ds.fetch(@key2) { @value }
 | 
						|
            @ds.fetch(@key1) { @value }
 | 
						|
            @ds.write @key2, @value, :unless_exists => true
 | 
						|
            @ds.delete @key2
 | 
						|
            @ds.increment @counter, 1, :initial => 100
 | 
						|
            @ds.increment @counter, 1, :expires_in => 12
 | 
						|
            @ds.decrement @counter, 1
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        x.report("mixed:rails-localcache:dalli") do
 | 
						|
          n.times do
 | 
						|
            @ds.with_local_cache do
 | 
						|
              @ds.read @key1
 | 
						|
              @ds.write @key2, @value
 | 
						|
              @ds.fetch(@key3) { @value }
 | 
						|
              @ds.fetch(@key2) { @value }
 | 
						|
              @ds.fetch(@key1) { @value }
 | 
						|
              @ds.write @key2, @value, :unless_exists => true
 | 
						|
              @ds.delete @key2
 | 
						|
              @ds.increment @counter, 1, :initial => 100
 | 
						|
              @ds.increment @counter, 1, :expires_in => 12
 | 
						|
              @ds.decrement @counter, 1
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @ds.clear
 | 
						|
        sizeable_data = "<marquee>some view partial data</marquee>" * 50
 | 
						|
        [@key1, @key2, @key3, @key4, @key5, @key6].each do |key|
 | 
						|
          @ds.write(key, sizeable_data)
 | 
						|
        end
 | 
						|
 | 
						|
        x.report("read_multi_big:rails:dalli") do
 | 
						|
          n.times do
 | 
						|
            @ds.read_multi @key1, @key2, @key3, @key4
 | 
						|
            @ds.read @key1
 | 
						|
            @ds.read @key2
 | 
						|
            @ds.read @key3
 | 
						|
            @ds.read @key4
 | 
						|
            @ds.read @key1
 | 
						|
            @ds.read @key2
 | 
						|
            @ds.read @key3
 | 
						|
            @ds.read_multi @key1, @key2, @key3
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        x.report("read_multi_big:rails-localcache:dalli") do
 | 
						|
          n.times do
 | 
						|
            @ds.with_local_cache do
 | 
						|
              @ds.read_multi @key1, @key2, @key3, @key4
 | 
						|
              @ds.read @key1
 | 
						|
              @ds.read @key2
 | 
						|
              @ds.read @key3
 | 
						|
              @ds.read @key4
 | 
						|
            end
 | 
						|
            @ds.with_local_cache do
 | 
						|
              @ds.read @key1
 | 
						|
              @ds.read @key2
 | 
						|
              @ds.read @key3
 | 
						|
              @ds.read_multi @key1, @key2, @key3
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("set:plain:dalli") do
 | 
						|
          n.times do
 | 
						|
            @m.set @key1, @marshalled, 0, :raw => true
 | 
						|
            @m.set @key2, @marshalled, 0, :raw => true
 | 
						|
            @m.set @key3, @marshalled, 0, :raw => true
 | 
						|
            @m.set @key1, @marshalled, 0, :raw => true
 | 
						|
            @m.set @key2, @marshalled, 0, :raw => true
 | 
						|
            @m.set @key3, @marshalled, 0, :raw => true
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("setq:plain:dalli") do
 | 
						|
          @m.multi do
 | 
						|
            n.times do
 | 
						|
              @m.set @key1, @marshalled, 0, :raw => true
 | 
						|
              @m.set @key2, @marshalled, 0, :raw => true
 | 
						|
              @m.set @key3, @marshalled, 0, :raw => true
 | 
						|
              @m.set @key1, @marshalled, 0, :raw => true
 | 
						|
              @m.set @key2, @marshalled, 0, :raw => true
 | 
						|
              @m.set @key3, @marshalled, 0, :raw => true
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("set:ruby:dalli") do
 | 
						|
          n.times do
 | 
						|
            @m.set @key1, @value
 | 
						|
            @m.set @key2, @value
 | 
						|
            @m.set @key3, @value
 | 
						|
            @m.set @key1, @value
 | 
						|
            @m.set @key2, @value
 | 
						|
            @m.set @key3, @value
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("get:plain:dalli") do
 | 
						|
          n.times do
 | 
						|
            @m.get @key1, :raw => true
 | 
						|
            @m.get @key2, :raw => true
 | 
						|
            @m.get @key3, :raw => true
 | 
						|
            @m.get @key1, :raw => true
 | 
						|
            @m.get @key2, :raw => true
 | 
						|
            @m.get @key3, :raw => true
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("get:ruby:dalli") do
 | 
						|
          n.times do
 | 
						|
            @m.get @key1
 | 
						|
            @m.get @key2
 | 
						|
            @m.get @key3
 | 
						|
            @m.get @key1
 | 
						|
            @m.get @key2
 | 
						|
            @m.get @key3
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("multiget:ruby:dalli") do
 | 
						|
          n.times do
 | 
						|
            # We don't use the keys array because splat is slow
 | 
						|
            @m.get_multi @key1, @key2, @key3, @key4, @key5, @key6
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("missing:ruby:dalli") do
 | 
						|
          n.times do
 | 
						|
            begin @m.delete @key1; rescue; end
 | 
						|
            begin @m.get @key1; rescue; end
 | 
						|
            begin @m.delete @key2; rescue; end
 | 
						|
            begin @m.get @key2; rescue; end
 | 
						|
            begin @m.delete @key3; rescue; end
 | 
						|
            begin @m.get @key3; rescue; end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("mixed:ruby:dalli") do
 | 
						|
          n.times do
 | 
						|
            @m.set @key1, @value
 | 
						|
            @m.set @key2, @value
 | 
						|
            @m.set @key3, @value
 | 
						|
            @m.get @key1
 | 
						|
            @m.get @key2
 | 
						|
            @m.get @key3
 | 
						|
            @m.set @key1, @value
 | 
						|
            @m.get @key1
 | 
						|
            @m.set @key2, @value
 | 
						|
            @m.get @key2
 | 
						|
            @m.set @key3, @value
 | 
						|
            @m.get @key3
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("mixedq:ruby:dalli") do
 | 
						|
          @m.multi do
 | 
						|
            n.times do
 | 
						|
              @m.set @key1, @value
 | 
						|
              @m.set @key2, @value
 | 
						|
              @m.set @key3, @value
 | 
						|
              @m.get @key1
 | 
						|
              @m.get @key2
 | 
						|
              @m.get @key3
 | 
						|
              @m.set @key1, @value
 | 
						|
              @m.get @key1
 | 
						|
              @m.set @key2, @value
 | 
						|
              @m.replace @key2, @value
 | 
						|
              @m.delete @key3
 | 
						|
              @m.add @key3, @value
 | 
						|
              @m.get @key2
 | 
						|
              @m.set @key3, @value
 | 
						|
              @m.get @key3
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        @m = Dalli::Client.new(@servers)
 | 
						|
        x.report("incr:ruby:dalli") do
 | 
						|
          counter = 'foocount'
 | 
						|
          n.times do
 | 
						|
            @m.incr counter, 1, 0, 1
 | 
						|
          end
 | 
						|
          n.times do
 | 
						|
            @m.decr counter, 1
 | 
						|
          end
 | 
						|
 | 
						|
          assert_equal 0, @m.incr(counter, 0)
 | 
						|
        end
 | 
						|
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
  end
 | 
						|
end
 |