libmemcached_store 0.2.3 → 0.6.0

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.
@@ -0,0 +1,10 @@
1
+ module SessionAutoloadTest
2
+ class Foo
3
+ def initialize(bar='baz')
4
+ @bar = bar
5
+ end
6
+ def inspect
7
+ "#<#{self.class} bar:#{@bar.inspect}>"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,94 @@
1
+ require 'benchmark'
2
+ require 'active_support'
3
+
4
+ require 'libmemcached_store'
5
+ require 'active_support/cache/libmemcached_store'
6
+
7
+ require 'dalli'
8
+ require 'active_support/cache/dalli_store'
9
+
10
+ puts "Testing with"
11
+ puts RUBY_DESCRIPTION
12
+ puts "Dalli #{Dalli::VERSION}"
13
+ puts "Libmemcached_store #{LibmemcachedStore::VERSION}"
14
+
15
+ # We'll use a simple @value to try to avoid spending time in Marshal,
16
+ # which is a constant penalty that both clients have to pay
17
+ @value = []
18
+ @marshalled = Marshal.dump(@value)
19
+
20
+ @servers = ['127.0.0.1:11211']
21
+ @key1 = "Short"
22
+ @key2 = "Sym1-2-3::45"*4
23
+ @key3 = "Long"*40
24
+ @key4 = "Medium"*8
25
+
26
+ N = 2_500
27
+
28
+ @dalli = ActiveSupport::Cache::DalliStore.new(@servers).silence!
29
+ @libm = ActiveSupport::Cache::LibmemcachedStore.new(@servers).silence!
30
+
31
+ def clear
32
+ @dalli.clear
33
+ @libm.clear
34
+ end
35
+
36
+ def test_method(title, method_name, key, *arguments)
37
+ { dalli: @dalli, libm: @libm }.each do |name, store|
38
+ @job.report("#{title}:#{name}") { N.times { store.send(method_name, key, *arguments) } }
39
+ end
40
+ end
41
+
42
+ def run_method(method_name, key, *arguments)
43
+ [@dalli, @libm].each do |store|
44
+ store.send(method_name, key, *arguments)
45
+ end
46
+ end
47
+
48
+ Benchmark.bm(31) do |x|
49
+ @job = x
50
+
51
+ test_method('write:short', :write, @key1, @value)
52
+ test_method('write:long', :write, @key3, @value)
53
+ test_method('write:raw', :write, @key4, @value, raw: true)
54
+
55
+ puts
56
+ clear
57
+
58
+ test_method('read:miss', :read, @key1)
59
+ test_method('read:miss2', :read, @key1)
60
+
61
+ run_method(:write, @key4, @value)
62
+ test_method('read:exist', :read, @key4)
63
+
64
+ run_method(:write, @key4, @value, expires_in: 1)
65
+ sleep(1)
66
+ test_method('read:expired', :read, @key2)
67
+
68
+ run_method(:write, @key3, @value, raw: true)
69
+ test_method('read:raw', :read, @key3, raw: true)
70
+
71
+ puts
72
+ clear
73
+
74
+ test_method('exist:miss', :exist?, @key4)
75
+
76
+ run_method(:write, @key4, @value)
77
+ test_method('exist:hit', :exist?, @key4)
78
+
79
+ puts
80
+ clear
81
+
82
+ test_method('delete:miss', :delete, @key4)
83
+
84
+ run_method(:write, @key1, @value)
85
+ test_method('delete:hit', :delete, @key1)
86
+
87
+ puts
88
+ clear
89
+
90
+ run_method(:write, @key4, 0, raw: true)
91
+
92
+ test_method('increment', :increment, @key4)
93
+ test_method('decrement', :decrement, @key4)
94
+ end
@@ -0,0 +1,5 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ $:.unshift File.expand_path('../../lib', __FILE__)
3
+
4
+ require 'minitest/autorun'
5
+ require 'mocha/setup'
metadata CHANGED
@@ -1,114 +1,160 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: libmemcached_store
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 3
10
- version: 0.2.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
7
+ - Christopher Cocchi-Perrier
8
+ - Ben Hutton
13
9
  - Jeffrey Hardy
14
10
  autorequire:
15
11
  bindir: bin
16
12
  cert_chain: []
17
-
18
- date: 2012-04-16 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
13
+ date: 2013-05-16 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: memcached
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: rack
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
21
44
  name: rake
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
22
51
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: mocha
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
32
64
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: memcached
36
65
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
46
- type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
49
72
  name: activesupport
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '3'
78
+ type: :development
50
79
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - <
55
- - !ruby/object:Gem::Version
56
- hash: 5
57
- segments:
58
- - 3
59
- version: "3"
60
- type: :runtime
61
- version_requirements: *id003
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '3'
85
+ - !ruby/object:Gem::Dependency
86
+ name: actionpack
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '3'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '3'
62
99
  description: |-
63
100
  An ActiveSupport cache store that uses the C-based libmemcached client through
64
101
  Evan Weaver's Ruby/SWIG wrapper, memcached. libmemcached is fast, lightweight,
65
102
  and supports consistent hashing, non-blocking IO, and graceful server failover.
66
- email:
67
- - packagethief@gmail.com
103
+ email: cocchi.c@gmail.com
68
104
  executables: []
69
-
70
105
  extensions: []
71
-
72
106
  extra_rdoc_files: []
73
-
74
- files:
75
- - lib/active_support/cache/compressed_libmemcached_store.rb
107
+ files:
108
+ - .gitignore
109
+ - .travis.yml
110
+ - BENCHMARKS
111
+ - CHANGELOG.md
112
+ - Gemfile
113
+ - MIT-LICENSE
114
+ - README.md
115
+ - Rakefile
116
+ - gemfiles/rails30.gemfile
117
+ - gemfiles/rails31.gemfile
118
+ - gemfiles/rails32.gemfile
119
+ - lib/action_dispatch/session/libmemcached_store.rb
76
120
  - lib/active_support/cache/libmemcached_store.rb
77
121
  - lib/libmemcached_store.rb
78
- - README
79
- - test/libmemcached_store_test.rb
80
- homepage: http://github.com/37signals/libmemcached_store
122
+ - lib/memcached/get_with_flags.rb
123
+ - lib/version.rb
124
+ - libmemcached_store.gemspec
125
+ - test/action_dispatch/abstract_unit.rb
126
+ - test/action_dispatch/libmemcached_store_test.rb
127
+ - test/active_support/libmemcached_store_test.rb
128
+ - test/fixtures/session_autoload_test.rb
129
+ - test/profile/benchmark.rb
130
+ - test/test_helper.rb
131
+ homepage: http://github.com/ccocchi/libmemcached_store
81
132
  licenses: []
82
-
133
+ metadata: {}
83
134
  post_install_message:
84
135
  rdoc_options: []
85
-
86
- require_paths:
136
+ require_paths:
87
137
  - lib
88
- required_ruby_version: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- hash: 3
94
- segments:
95
- - 0
96
- version: "0"
97
- required_rubygems_version: !ruby/object:Gem::Requirement
98
- none: false
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- hash: 3
103
- segments:
104
- - 0
105
- version: "0"
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
106
148
  requirements: []
107
-
108
149
  rubyforge_project:
109
- rubygems_version: 1.8.21
150
+ rubygems_version: 2.0.0
110
151
  signing_key:
111
- specification_version: 3
112
- summary: ActiveSupport::Cache wrapper for libmemcached
113
- test_files:
114
- - test/libmemcached_store_test.rb
152
+ specification_version: 4
153
+ summary: ActiveSupport 3+ cache store for the C-based libmemcached client
154
+ test_files:
155
+ - test/action_dispatch/abstract_unit.rb
156
+ - test/action_dispatch/libmemcached_store_test.rb
157
+ - test/active_support/libmemcached_store_test.rb
158
+ - test/fixtures/session_autoload_test.rb
159
+ - test/profile/benchmark.rb
160
+ - test/test_helper.rb
data/README DELETED
@@ -1,47 +0,0 @@
1
- = LibmemcachedStore
2
-
3
- An ActiveSupport cache store that uses the C-based libmemcached client through
4
- Evan Weaver's Ruby/SWIG wrapper, memcached. libmemcached is fast, lightweight,
5
- and supports consistent hashing, non-blocking IO, and graceful server failover.
6
-
7
- == Prerequisites
8
-
9
- You'll need both the libmemcached client and the memcached gem:
10
-
11
- * http://tangent.org/552/libmemcached.html
12
- * http://blog.evanweaver.com/files/doc/fauna/memcached
13
-
14
- Make sure you install libmemcached first, before you try installing the gem. If
15
- you're using OS X, the easiest way to install libmemcached is through MacPorts:
16
-
17
- sudo port install libmemcached
18
-
19
- For other platforms, download and extract the libmemcached tarball and install
20
- manually:
21
-
22
- ./configure
23
- make && sudo make install
24
-
25
- Once libmemcached is installed, install the memcached gem:
26
-
27
- gem install memcached --no-rdoc --no-ri
28
-
29
- == Usage
30
-
31
- This is a drop-in replacement for the memcache store that ships with Rails. To
32
- enable, set the <tt>config.cache_store</tt> option to <tt>:libmemcached_store</tt>
33
- in the config for your environment
34
-
35
- config.cache_store = :libmemcached_store
36
-
37
- If no servers are specified, localhost is assumed. You can specify a list of
38
- server addresses, either as hostnames or IP addresses, with or without a port
39
- designation. If no port is given, 11211 is assumed:
40
-
41
- config.cache_store = :libmemcached_store, %w(cache-01 cache-02 127.0.0.1:11212)
42
-
43
- == Props
44
-
45
- Thanks to Brian Aker (http://tangent.org) for creating libmemcached, and Evan
46
- Weaver (http://blog.evanweaver.com) for the Ruby wrapper.
47
-
@@ -1,15 +0,0 @@
1
- module ActiveSupport
2
- module Cache
3
- class CompressedLibmemcachedStore < LibmemcachedStore
4
- def read(name, options = {})
5
- if value = super(name, (options || {}).merge(:raw => true))
6
- Marshal.load(ActiveSupport::Gzip.decompress(value))
7
- end
8
- end
9
-
10
- def write(name, value, options = {})
11
- super(name, ActiveSupport::Gzip.compress(Marshal.dump(value)), (options || {}).merge(:raw => true))
12
- end
13
- end
14
- end
15
- end
@@ -1,84 +0,0 @@
1
- require 'test/unit'
2
- require 'rubygems'
3
- require 'active_support'
4
- require 'memcached'
5
-
6
- require File.dirname(__FILE__) + '/../lib/libmemcached_store'
7
-
8
- # Make it easier to get at the underlying cache options during testing.
9
- class ActiveSupport::Cache::LibmemcachedStore
10
- delegate :options, :to => '@cache'
11
- end
12
-
13
- class LibmemcachedStoreTest < Test::Unit::TestCase
14
- def setup
15
- @store = ActiveSupport::Cache.lookup_store :libmemcached_store
16
- @store.clear
17
- end
18
-
19
- def test_should_identify_cache_store
20
- assert_kind_of ActiveSupport::Cache::LibmemcachedStore, @store
21
- end
22
-
23
- def test_should_set_server_addresses_to_localhost_if_none_are_given
24
- assert_equal %w(localhost), @store.addresses
25
- end
26
-
27
- def test_should_set_custom_server_addresses
28
- store = ActiveSupport::Cache.lookup_store :libmemcached_store, 'localhost', '192.168.1.1'
29
- assert_equal %w(localhost 192.168.1.1), store.addresses
30
- end
31
-
32
- def test_should_enable_consistent_hashing_by_default
33
- assert_equal :consistent, @store.options[:distribution]
34
- end
35
-
36
- def test_should_enable_non_blocking_io_by_default
37
- assert_equal true, @store.options[:no_block]
38
- end
39
-
40
- def test_should_enable_server_failover_by_default
41
- assert_equal true, @store.options[:auto_eject_hosts]
42
- end
43
-
44
- def test_should_allow_configuration_of_custom_options
45
- options = {
46
- :prefix_key => 'test',
47
- :distribution => :modula,
48
- :no_block => false,
49
- :auto_eject_hosts => false
50
- }
51
-
52
- store = ActiveSupport::Cache.lookup_store :libmemcached_store, 'localhost', options
53
-
54
- assert_equal 'test', store.instance_variable_get(:@cache).prefix_key
55
- assert_equal :modula, store.options[:distribution]
56
- assert_equal false, store.options[:no_block]
57
- assert_equal false, store.options[:auto_eject_hosts]
58
- end
59
-
60
- def test_should_use_local_cache
61
- @store.with_local_cache do
62
- @store.write('key', 'value')
63
- assert_equal 'value', @store.send(:local_cache).read('key')
64
- end
65
-
66
- assert_equal 'value', @store.read('key')
67
- end
68
-
69
- def test_should_read_multiple_keys
70
- @store.write('a', 1)
71
- @store.write('b', 2)
72
-
73
- assert_equal({ 'a' => 1, 'b' => 2 }, @store.read_multi('a', 'b', 'c'))
74
- assert_equal({}, @store.read_multi())
75
- end
76
-
77
- def test_should_fix_long_keys
78
- key = ("0123456789" * 100).freeze
79
- assert key.size > 250
80
- @store.write(key, 1)
81
- assert_equal 1, @store.read(key)
82
- end
83
-
84
- end