memcached 0.6 → 0.7
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.
- data.tar.gz.sig +0 -0
- data/BENCHMARKS +101 -0
- data/CHANGELOG +2 -0
- data/COMPATIBILITY +9 -0
- data/Manifest +9 -5
- data/README +13 -25
- data/TODO +1 -8
- data/ext/extconf.rb +8 -4
- data/ext/rlibmemcached.i +156 -0
- data/ext/{libmemcached_wrap.c → rlibmemcached_wrap.c} +890 -585
- data/lib/memcached.rb +8 -7
- data/lib/memcached/behaviors.rb +4 -4
- data/lib/memcached/exceptions.rb +7 -4
- data/lib/memcached/memcached.rb +82 -49
- data/lib/memcached/rails.rb +55 -0
- data/memcached.gemspec +14 -6
- data/test/profile/benchmark.rb +371 -0
- data/test/profile/profile.rb +14 -0
- data/test/profile/valgrind.rb +133 -0
- data/test/unit/binding_test.rb +1 -1
- data/test/unit/memcached_test.rb +67 -15
- data/test/unit/rails_test.rb +72 -0
- metadata +12 -7
- metadata.gz.sig +0 -0
- data/ext/libmemcached.i +0 -107
- data/test/benchmark/benchmark.rb +0 -259
- data/test/benchmark/benchmark_set_get.rb +0 -56
- data/test/benchmark/profile.rb +0 -49
data/test/unit/binding_test.rb
CHANGED
data/test/unit/memcached_test.rb
CHANGED
@@ -5,7 +5,7 @@ class MemcachedTest < Test::Unit::TestCase
|
|
5
5
|
|
6
6
|
def setup
|
7
7
|
@servers = ['127.0.0.1:43042', '127.0.0.1:43043']
|
8
|
-
@namespace = '
|
8
|
+
@namespace = 'memcached_test_namespace'
|
9
9
|
@cache = Memcached.new(
|
10
10
|
@servers,
|
11
11
|
:namespace => @namespace,
|
@@ -33,11 +33,27 @@ class MemcachedTest < Test::Unit::TestCase
|
|
33
33
|
assert_equal 43043, cache.send(:server_structs).last.port
|
34
34
|
end
|
35
35
|
|
36
|
+
def test_destroy
|
37
|
+
cache = Memcached.new @servers, :namespace => 'test'
|
38
|
+
cache.destroy
|
39
|
+
assert_raise(Memcached::ClientError) do
|
40
|
+
cache.get key
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
36
44
|
def test_initialize_with_invalid_server_strings
|
37
45
|
assert_raise(ArgumentError) { Memcached.new "localhost:43042" }
|
38
46
|
assert_raise(ArgumentError) { Memcached.new "127.0.0.1:memcached" }
|
39
47
|
assert_raise(ArgumentError) { Memcached.new "127.0.0.1:43043:1" }
|
40
48
|
end
|
49
|
+
|
50
|
+
def test_initialize_with_missing_server
|
51
|
+
# XXX Triggers abort trap with libmemcached --enable-debug.
|
52
|
+
@cache = Memcached.new "127.0.0.1:43044"
|
53
|
+
assert_raises Memcached::SystemError do
|
54
|
+
@cache.get key
|
55
|
+
end
|
56
|
+
end
|
41
57
|
|
42
58
|
def test_initialize_without_namespace
|
43
59
|
cache = Memcached.new @servers
|
@@ -74,7 +90,7 @@ class MemcachedTest < Test::Unit::TestCase
|
|
74
90
|
def test_get_with_namespace
|
75
91
|
@cache.set key, @value
|
76
92
|
result = @cache.get key, false
|
77
|
-
direct_result =
|
93
|
+
direct_result = Rlibmemcached.memcached_get(
|
78
94
|
@cache.instance_variable_get("@struct"),
|
79
95
|
"#{@namespace}#{key}"
|
80
96
|
).first
|
@@ -94,11 +110,11 @@ class MemcachedTest < Test::Unit::TestCase
|
|
94
110
|
end
|
95
111
|
end
|
96
112
|
|
97
|
-
def
|
113
|
+
def test_values_with_null_characters_are_not_truncated
|
98
114
|
value = OpenStruct.new(:a => Object.new) # Marshals with a null \000
|
99
115
|
@cache.set key, value
|
100
116
|
result = @cache.get key, false
|
101
|
-
non_wrapped_result =
|
117
|
+
non_wrapped_result = Rlibmemcached.memcached_get(
|
102
118
|
@cache.instance_variable_get("@struct"),
|
103
119
|
"#{@namespace}#{key}"
|
104
120
|
).first
|
@@ -107,21 +123,33 @@ class MemcachedTest < Test::Unit::TestCase
|
|
107
123
|
|
108
124
|
def test_get_invalid_key
|
109
125
|
assert_raise(Memcached::ClientError) { @cache.get(key * 100) }
|
110
|
-
|
126
|
+
# XXX Trying to get Krow to change this to ProtocolError
|
127
|
+
assert_raise(Memcached::NotFound) { @cache.get "I'm so bad" }
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_get_multi_invalid_key
|
131
|
+
assert_raise(Memcached::ClientError) { @cache.get([key * 100]) }
|
132
|
+
# XXX Trying to get Krow to change this to ProtocolError
|
133
|
+
assert_equal({},
|
134
|
+
@cache.get(["I'm so bad"]))
|
111
135
|
end
|
112
136
|
|
113
137
|
def test_get_multi
|
114
138
|
@cache.set "#{key}_1", 1
|
115
139
|
@cache.set "#{key}_2", 2
|
116
|
-
assert_equal
|
117
|
-
@cache.get(["#{key}_1", "#{key}_2"])
|
140
|
+
assert_equal({"#{key}_1" => 1, "#{key}_2" => 2},
|
141
|
+
@cache.get(["#{key}_1", "#{key}_2"]))
|
118
142
|
end
|
119
143
|
|
120
144
|
def test_get_multi_missing
|
121
145
|
@cache.set "#{key}_1", 1
|
122
146
|
@cache.delete "#{key}_2" rescue nil
|
123
|
-
|
124
|
-
|
147
|
+
@cache.set "#{key}_3", 3
|
148
|
+
@cache.delete "#{key}_4" rescue nil
|
149
|
+
assert_equal(
|
150
|
+
{"test_get_multi_missing_3"=>3, "test_get_multi_missing_1"=>1},
|
151
|
+
@cache.get(["#{key}_1", "#{key}_2", "#{key}_3", "#{key}_4"])
|
152
|
+
)
|
125
153
|
end
|
126
154
|
|
127
155
|
def test_set_and_get_unmarshalled
|
@@ -129,6 +157,26 @@ class MemcachedTest < Test::Unit::TestCase
|
|
129
157
|
result = @cache.get key, false
|
130
158
|
assert_equal @marshalled_value, result
|
131
159
|
end
|
160
|
+
|
161
|
+
def test_get_multi_unmarshalled
|
162
|
+
@cache.set "#{key}_1", 1, 0, false
|
163
|
+
@cache.set "#{key}_2", 2, 0, false
|
164
|
+
assert_equal(
|
165
|
+
{"#{key}_1" => "1", "#{key}_2" => "2"},
|
166
|
+
@cache.get(["#{key}_1", "#{key}_2"], false)
|
167
|
+
)
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_get_multi_mixed_marshalling
|
171
|
+
@cache.set "#{key}_1", 1
|
172
|
+
@cache.set "#{key}_2", 2, 0, false
|
173
|
+
assert_nothing_raised do
|
174
|
+
@cache.get(["#{key}_1", "#{key}_2"], false)
|
175
|
+
end
|
176
|
+
assert_raise(ArgumentError) do
|
177
|
+
@cache.get(["#{key}_1", "#{key}_2"])
|
178
|
+
end
|
179
|
+
end
|
132
180
|
|
133
181
|
# Set
|
134
182
|
|
@@ -224,8 +272,7 @@ class MemcachedTest < Test::Unit::TestCase
|
|
224
272
|
assert_equal 15, @cache.increment(key, 5)
|
225
273
|
end
|
226
274
|
|
227
|
-
def test_missing_increment
|
228
|
-
# XXX Fails due to libmemcached bug
|
275
|
+
def test_missing_increment
|
229
276
|
@cache.delete key rescue nil
|
230
277
|
assert_raise(Memcached::NotFound) do
|
231
278
|
@cache.increment key
|
@@ -242,8 +289,7 @@ class MemcachedTest < Test::Unit::TestCase
|
|
242
289
|
assert_equal 5, @cache.decrement(key, 5)
|
243
290
|
end
|
244
291
|
|
245
|
-
def test_missing_decrement
|
246
|
-
# XXX Fails due to libmemcached bug
|
292
|
+
def test_missing_decrement
|
247
293
|
@cache.delete key rescue nil
|
248
294
|
assert_raise(Memcached::NotFound) do
|
249
295
|
@cache.decrement key
|
@@ -331,6 +377,12 @@ class MemcachedTest < Test::Unit::TestCase
|
|
331
377
|
cache = @cache.clone
|
332
378
|
assert_equal cache.servers, @cache.servers
|
333
379
|
assert_not_equal cache, @cache
|
380
|
+
|
381
|
+
# Definitely check that the structs are unlinked
|
382
|
+
cache.destroy
|
383
|
+
assert_nothing_raised do
|
384
|
+
@cache.set key, @value
|
385
|
+
end
|
334
386
|
end
|
335
387
|
|
336
388
|
# Non-blocking IO
|
@@ -341,7 +393,7 @@ class MemcachedTest < Test::Unit::TestCase
|
|
341
393
|
assert_nothing_raised do
|
342
394
|
cache.set key, @value
|
343
395
|
end
|
344
|
-
ret =
|
396
|
+
ret = Rlibmemcached.memcached_set(
|
345
397
|
cache.instance_variable_get("@struct"),
|
346
398
|
"#{@namespace}#{key}",
|
347
399
|
@marshalled_value,
|
@@ -355,7 +407,7 @@ class MemcachedTest < Test::Unit::TestCase
|
|
355
407
|
assert_nothing_raised do
|
356
408
|
@nb_cache.set key, @value
|
357
409
|
end
|
358
|
-
ret =
|
410
|
+
ret = Rlibmemcached.memcached_set(
|
359
411
|
@nb_cache.instance_variable_get("@struct"),
|
360
412
|
"#{@namespace}#{key}",
|
361
413
|
@marshalled_value,
|
@@ -0,0 +1,72 @@
|
|
1
|
+
|
2
|
+
require "#{File.dirname(__FILE__)}/../test_helper"
|
3
|
+
|
4
|
+
class RailsTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@servers = ['127.0.0.1:43042', '127.0.0.1:43043']
|
8
|
+
@namespace = 'rails_test_namespace'
|
9
|
+
@cache = Memcached::Rails.new(@servers, :namespace => @namespace)
|
10
|
+
@value = OpenStruct.new(:a => 1, :b => 2, :c => GenericClass)
|
11
|
+
@marshalled_value = Marshal.dump(@value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_get
|
15
|
+
@cache.set key, @value
|
16
|
+
result = @cache.get key
|
17
|
+
assert_equal @value, result
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_get_multi
|
21
|
+
@cache.set key, @value
|
22
|
+
result = @cache.get_multi key
|
23
|
+
assert_equal(
|
24
|
+
{key => @value},
|
25
|
+
result
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_delete
|
30
|
+
@cache.set key, @value
|
31
|
+
assert_nothing_raised do
|
32
|
+
@cache.delete key
|
33
|
+
end
|
34
|
+
assert_nil(@cache.get(key))
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_delete_missing
|
38
|
+
assert_nothing_raised do
|
39
|
+
@cache.delete key
|
40
|
+
assert_nil(@cache.delete(key))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_bracket_accessors
|
45
|
+
@cache[key] = @value
|
46
|
+
result = @cache[key]
|
47
|
+
assert_equal @value, result
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_get_missing
|
51
|
+
@cache.delete key rescue nil
|
52
|
+
result = @cache.get key
|
53
|
+
assert_equal nil, result
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_get_nil
|
57
|
+
@cache.set key, nil, 0
|
58
|
+
result = @cache.get key
|
59
|
+
assert_equal nil, result
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_namespace
|
63
|
+
assert_equal @namespace, @cache.namespace
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def key
|
69
|
+
caller.first[/`(.*)'/, 1]
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memcached
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.7"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan Weaver
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
yZ0=
|
31
31
|
-----END CERTIFICATE-----
|
32
32
|
|
33
|
-
date: 2008-
|
33
|
+
date: 2008-02-05 00:00:00 -05:00
|
34
34
|
default_executable:
|
35
35
|
dependencies: []
|
36
36
|
|
@@ -43,26 +43,30 @@ extensions:
|
|
43
43
|
extra_rdoc_files: []
|
44
44
|
|
45
45
|
files:
|
46
|
+
- BENCHMARKS
|
46
47
|
- CHANGELOG
|
48
|
+
- COMPATIBILITY
|
47
49
|
- ext/extconf.rb
|
48
|
-
- ext/
|
49
|
-
- ext/
|
50
|
+
- ext/rlibmemcached.i
|
51
|
+
- ext/rlibmemcached_wrap.c
|
50
52
|
- lib/memcached/behaviors.rb
|
51
53
|
- lib/memcached/exceptions.rb
|
52
54
|
- lib/memcached/integer.rb
|
53
55
|
- lib/memcached/memcached.rb
|
56
|
+
- lib/memcached/rails.rb
|
54
57
|
- lib/memcached.rb
|
55
58
|
- LICENSE
|
56
59
|
- Manifest
|
57
60
|
- README
|
58
|
-
- test/
|
59
|
-
- test/
|
60
|
-
- test/
|
61
|
+
- test/profile/benchmark.rb
|
62
|
+
- test/profile/profile.rb
|
63
|
+
- test/profile/valgrind.rb
|
61
64
|
- test/setup.rb
|
62
65
|
- test/teardown.rb
|
63
66
|
- test/test_helper.rb
|
64
67
|
- test/unit/binding_test.rb
|
65
68
|
- test/unit/memcached_test.rb
|
69
|
+
- test/unit/rails_test.rb
|
66
70
|
- TODO
|
67
71
|
- memcached.gemspec
|
68
72
|
has_rdoc: true
|
@@ -96,3 +100,4 @@ test_files:
|
|
96
100
|
- test/test_helper.rb
|
97
101
|
- test/unit/binding_test.rb
|
98
102
|
- test/unit/memcached_test.rb
|
103
|
+
- test/unit/rails_test.rb
|
metadata.gz.sig
CHANGED
Binary file
|
data/ext/libmemcached.i
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
%module libmemcached
|
2
|
-
%{
|
3
|
-
#include <libmemcached/memcached.h>
|
4
|
-
%}
|
5
|
-
|
6
|
-
%warnfilter(SWIGWARN_RUBY_WRONG_NAME) memcached_st;
|
7
|
-
%warnfilter(SWIGWARN_RUBY_WRONG_NAME) memcached_server_st;
|
8
|
-
%warnfilter(SWIGWARN_RUBY_WRONG_NAME) memcached_stat_st;
|
9
|
-
%warnfilter(SWIGWARN_RUBY_WRONG_NAME) memcached_string_st;
|
10
|
-
%warnfilter(SWIGWARN_RUBY_WRONG_NAME) memcached_result_st;
|
11
|
-
|
12
|
-
%include "typemaps.i"
|
13
|
-
|
14
|
-
// Input maps
|
15
|
-
%apply unsigned short { uint8_t };
|
16
|
-
%apply unsigned int { uint16_t };
|
17
|
-
%apply unsigned long { uint32_t flags, uint32_t offset };
|
18
|
-
|
19
|
-
%typemap(in) (void *data) {
|
20
|
-
int value = FIX2INT($input);
|
21
|
-
if (value == 0 || value == 1) {
|
22
|
-
$1 = (void *) value;
|
23
|
-
} else {
|
24
|
-
// Only pass by reference for :distribution and :hash
|
25
|
-
value = value - 2;
|
26
|
-
$1 = &value;
|
27
|
-
}
|
28
|
-
};
|
29
|
-
|
30
|
-
%typemap(in) (char *str, size_t len) {
|
31
|
-
$1 = STR2CSTR($input);
|
32
|
-
$2 = (size_t) RSTRING($input)->len;
|
33
|
-
};
|
34
|
-
|
35
|
-
%apply (char *str, size_t len) {
|
36
|
-
(char *key, size_t key_length),
|
37
|
-
(char *value, size_t value_length)
|
38
|
-
};
|
39
|
-
|
40
|
-
// Output maps
|
41
|
-
%apply unsigned short *OUTPUT {memcached_return *error}
|
42
|
-
%apply unsigned int *OUTPUT {uint32_t *flags}
|
43
|
-
%apply size_t *OUTPUT {size_t *value_length}
|
44
|
-
%apply unsigned long long *OUTPUT {uint64_t *value}
|
45
|
-
|
46
|
-
%typemap(out) (char **) {
|
47
|
-
int i;
|
48
|
-
VALUE ary = rb_ary_new();
|
49
|
-
$result = rb_ary_new();
|
50
|
-
|
51
|
-
for(i=0; $1[i] != NULL; i++) {
|
52
|
-
rb_ary_store(ary, i, rb_str_new2($1[i]));
|
53
|
-
}
|
54
|
-
rb_ary_push($result, ary);
|
55
|
-
free($1);
|
56
|
-
};
|
57
|
-
|
58
|
-
%include "/opt/local/include/libmemcached/memcached.h"
|
59
|
-
|
60
|
-
// Manual wrappers
|
61
|
-
|
62
|
-
// SWIG likes to use SWIG_FromCharPtr instead of SWIG_FromCharPtrAndSize because of the
|
63
|
-
// retval/argout split, so it truncates return values with \0 in them
|
64
|
-
VALUE memcached_get_ruby_string(memcached_st *ptr, char *key, size_t key_length, uint32_t *flags, memcached_return *error);
|
65
|
-
%{
|
66
|
-
VALUE memcached_get_ruby_string(memcached_st *ptr, char *key, size_t key_length, uint32_t *flags, memcached_return *error) {
|
67
|
-
char *svalue;
|
68
|
-
size_t *value_length;
|
69
|
-
svalue = memcached_get(ptr, key, key_length, value_length, flags, error);
|
70
|
-
return rb_str_new(svalue, *value_length);
|
71
|
-
};
|
72
|
-
%}
|
73
|
-
|
74
|
-
// Ruby isn't aware that the pointer is an array... there is probably a better way to do this
|
75
|
-
memcached_server_st *memcached_select_server_at(memcached_st *in_ptr, int index);
|
76
|
-
%{
|
77
|
-
memcached_server_st *memcached_select_server_at(memcached_st *in_ptr, int index) {
|
78
|
-
return &(in_ptr->hosts[index]);
|
79
|
-
};
|
80
|
-
%}
|
81
|
-
|
82
|
-
// Same, but for stats
|
83
|
-
memcached_stat_st *memcached_select_stat_at(memcached_st *in_ptr, memcached_stat_st *stat_ptr, int index);
|
84
|
-
%{
|
85
|
-
memcached_stat_st *memcached_select_stat_at(memcached_st *in_ptr, memcached_stat_st *stat_ptr, int index) {
|
86
|
-
return &(stat_ptr[index]);
|
87
|
-
};
|
88
|
-
%}
|
89
|
-
|
90
|
-
// Unbreak a libmemcached 0.13 deference issue
|
91
|
-
void memcached_repair_server_st(memcached_st *in_ptr, memcached_server_st *host);
|
92
|
-
%{
|
93
|
-
void memcached_repair_server_st(memcached_st *in_ptr, memcached_server_st *host) {
|
94
|
-
host->write_ptr= 0;
|
95
|
-
};
|
96
|
-
%}
|
97
|
-
|
98
|
-
// Stub some bogus methods left in the 0.13 memcached.h header
|
99
|
-
%{
|
100
|
-
memcached_return memcached_mdelete(memcached_st *ptr, char **key, size_t *key_length, unsigned int number_of_keys, time_t expiration) {
|
101
|
-
return;
|
102
|
-
};
|
103
|
-
memcached_return memcached_mdelete_by_key(memcached_st *ptr, char *master_key, size_t master_key_length,
|
104
|
-
char **key, size_t *key_length, unsigned int number_of_keys, time_t expiration) {
|
105
|
-
return;
|
106
|
-
};
|
107
|
-
%}
|
data/test/benchmark/benchmark.rb
DELETED
@@ -1,259 +0,0 @@
|
|
1
|
-
|
2
|
-
HERE = File.dirname(__FILE__)
|
3
|
-
$LOAD_PATH << "#{HERE}/../../lib/"
|
4
|
-
|
5
|
-
require 'memcached'
|
6
|
-
require 'benchmark'
|
7
|
-
require 'rubygems'
|
8
|
-
require 'memcache'
|
9
|
-
|
10
|
-
# We'll use a simple @value to try to avoid spending time in Marshal,
|
11
|
-
# which is a constant penalty that both clients have to pay
|
12
|
-
@value = []
|
13
|
-
@marshalled = Marshal.dump(@value)
|
14
|
-
|
15
|
-
@opts = [
|
16
|
-
['127.0.0.1:43042', '127.0.0.1:43043'],
|
17
|
-
{
|
18
|
-
:buffer_requests => false,
|
19
|
-
:no_block => false,
|
20
|
-
:namespace => "benchmark_namespace"
|
21
|
-
}
|
22
|
-
]
|
23
|
-
@key1 = "Short"
|
24
|
-
@key2 = "Sym1-2-3::45"*8
|
25
|
-
@key3 = "Long"*40
|
26
|
-
@key4 = "Medium"*8
|
27
|
-
|
28
|
-
def restart_servers
|
29
|
-
system("ruby #{HERE}/../setup.rb")
|
30
|
-
sleep(1)
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
Benchmark.bm(31) do |x|
|
35
|
-
restart_servers
|
36
|
-
|
37
|
-
n = 1000
|
38
|
-
|
39
|
-
@m = Memcached.new(
|
40
|
-
@opts[0],
|
41
|
-
@opts[1].merge(:no_block => true, :buffer_requests => true)
|
42
|
-
)
|
43
|
-
x.report("set:plain:noblock:memcached") do
|
44
|
-
n.times do
|
45
|
-
@m.set @key1, @marshalled, 0, false
|
46
|
-
@m.set @key2, @marshalled, 0, false
|
47
|
-
@m.set @key3, @marshalled, 0, false
|
48
|
-
@m.set @key1, @marshalled, 0, false
|
49
|
-
@m.set @key2, @marshalled, 0, false
|
50
|
-
@m.set @key3, @marshalled, 0, false
|
51
|
-
end
|
52
|
-
end
|
53
|
-
@m = Memcached.new(*@opts)
|
54
|
-
x.report("set:plain:memcached") do
|
55
|
-
n.times do
|
56
|
-
@m.set @key1, @marshalled, 0, false
|
57
|
-
@m.set @key2, @marshalled, 0, false
|
58
|
-
@m.set @key3, @marshalled, 0, false
|
59
|
-
@m.set @key1, @marshalled, 0, false
|
60
|
-
@m.set @key2, @marshalled, 0, false
|
61
|
-
@m.set @key3, @marshalled, 0, false
|
62
|
-
end
|
63
|
-
end
|
64
|
-
@m = MemCache.new(*@opts)
|
65
|
-
x.report("set:plain:memcache-client") do
|
66
|
-
n.times do
|
67
|
-
@m.set @key1, @marshalled, 0, true
|
68
|
-
@m.set @key2, @marshalled, 0, true
|
69
|
-
@m.set @key3, @marshalled, 0, true
|
70
|
-
@m.set @key1, @marshalled, 0, true
|
71
|
-
@m.set @key2, @marshalled, 0, true
|
72
|
-
@m.set @key3, @marshalled, 0, true
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
restart_servers
|
77
|
-
|
78
|
-
@m = Memcached.new(
|
79
|
-
@opts[0],
|
80
|
-
@opts[1].merge(:no_block => true, :buffer_requests => true)
|
81
|
-
)
|
82
|
-
x.report("set:ruby:noblock:memcached") do
|
83
|
-
n.times do
|
84
|
-
@m.set @key1, @value
|
85
|
-
@m.set @key2, @value
|
86
|
-
@m.set @key3, @value
|
87
|
-
@m.set @key1, @value
|
88
|
-
@m.set @key2, @value
|
89
|
-
@m.set @key3, @value
|
90
|
-
end
|
91
|
-
end
|
92
|
-
@m = Memcached.new(*@opts)
|
93
|
-
x.report("set:ruby:memcached") do
|
94
|
-
n.times do
|
95
|
-
@m.set @key1, @value
|
96
|
-
@m.set @key2, @value
|
97
|
-
@m.set @key3, @value
|
98
|
-
@m.set @key1, @value
|
99
|
-
@m.set @key2, @value
|
100
|
-
@m.set @key3, @value
|
101
|
-
end
|
102
|
-
end
|
103
|
-
@m = MemCache.new(*@opts)
|
104
|
-
x.report("set:ruby:memcache-client") do
|
105
|
-
n.times do
|
106
|
-
@m.set @key1, @value
|
107
|
-
@m.set @key2, @value
|
108
|
-
@m.set @key3, @value
|
109
|
-
@m.set @key1, @value
|
110
|
-
@m.set @key2, @value
|
111
|
-
@m.set @key3, @value
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
@m = Memcached.new(*@opts)
|
116
|
-
x.report("get:plain:memcached") do
|
117
|
-
n.times do
|
118
|
-
@m.get @key1, false
|
119
|
-
@m.get @key2, false
|
120
|
-
@m.get @key3, false
|
121
|
-
@m.get @key1, false
|
122
|
-
@m.get @key2, false
|
123
|
-
@m.get @key3, false
|
124
|
-
end
|
125
|
-
end
|
126
|
-
@m = MemCache.new(*@opts)
|
127
|
-
x.report("get:plain:memcache-client") do
|
128
|
-
n.times do
|
129
|
-
@m.get @key1, true
|
130
|
-
@m.get @key2, true
|
131
|
-
@m.get @key3, true
|
132
|
-
@m.get @key1, true
|
133
|
-
@m.get @key2, true
|
134
|
-
@m.get @key3, true
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
@m = Memcached.new(*@opts)
|
139
|
-
x.report("get:ruby:memcached") do
|
140
|
-
n.times do
|
141
|
-
@m.get @key1
|
142
|
-
@m.get @key2
|
143
|
-
@m.get @key3
|
144
|
-
@m.get @key1
|
145
|
-
@m.get @key2
|
146
|
-
@m.get @key3
|
147
|
-
end
|
148
|
-
end
|
149
|
-
@m = MemCache.new(*@opts)
|
150
|
-
x.report("get:ruby:memcache-client") do
|
151
|
-
n.times do
|
152
|
-
@m.get @key1
|
153
|
-
@m.get @key2
|
154
|
-
@m.get @key3
|
155
|
-
@m.get @key1
|
156
|
-
@m.get @key2
|
157
|
-
@m.get @key3
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
restart_servers
|
162
|
-
|
163
|
-
@m = Memcached.new(*@opts)
|
164
|
-
x.report("missing:ruby:memcached") do
|
165
|
-
n.times do
|
166
|
-
begin @m.delete @key1; rescue Memcached::NotFound; end
|
167
|
-
begin @m.get @key1; rescue Memcached::NotFound; end
|
168
|
-
begin @m.delete @key2; rescue Memcached::NotFound; end
|
169
|
-
begin @m.get @key2; rescue Memcached::NotFound; end
|
170
|
-
begin @m.delete @key3; rescue Memcached::NotFound; end
|
171
|
-
begin @m.get @key3; rescue Memcached::NotFound; end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
@m = MemCache.new(*@opts)
|
175
|
-
x.report("missing:ruby:memcache-client") do
|
176
|
-
n.times do
|
177
|
-
begin @m.delete @key1; rescue; end
|
178
|
-
begin @m.get @key1; rescue; end
|
179
|
-
begin @m.delete @key2; rescue; end
|
180
|
-
begin @m.get @key2; rescue; end
|
181
|
-
begin @m.delete @key3; rescue; end
|
182
|
-
begin @m.get @key3; rescue; end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
restart_servers
|
187
|
-
|
188
|
-
@m = Memcached.new(
|
189
|
-
@opts[0],
|
190
|
-
@opts[1].merge(:no_block => true, :buffer_requests => true)
|
191
|
-
)
|
192
|
-
x.report("mixed:ruby:noblock:memcached") do
|
193
|
-
n.times do
|
194
|
-
@m.set @key1, @value
|
195
|
-
@m.set @key2, @value
|
196
|
-
@m.set @key3, @value
|
197
|
-
@m.get @key1
|
198
|
-
@m.get @key2
|
199
|
-
@m.get @key3
|
200
|
-
@m.set @key1, @value
|
201
|
-
@m.get @key1
|
202
|
-
@m.set @key2, @value
|
203
|
-
@m.get @key2
|
204
|
-
@m.set @key3, @value
|
205
|
-
@m.get @key3
|
206
|
-
end
|
207
|
-
end
|
208
|
-
@m = Memcached.new(*@opts)
|
209
|
-
x.report("mixed:ruby:memcached") do
|
210
|
-
n.times do
|
211
|
-
@m.set @key1, @value
|
212
|
-
@m.set @key2, @value
|
213
|
-
@m.set @key3, @value
|
214
|
-
@m.get @key1
|
215
|
-
@m.get @key2
|
216
|
-
@m.get @key3
|
217
|
-
@m.set @key1, @value
|
218
|
-
@m.get @key1
|
219
|
-
@m.set @key2, @value
|
220
|
-
@m.get @key2
|
221
|
-
@m.set @key3, @value
|
222
|
-
@m.get @key3
|
223
|
-
end
|
224
|
-
end
|
225
|
-
@m = MemCache.new(*@opts)
|
226
|
-
x.report("mixed:ruby:memcache-client") do
|
227
|
-
n.times do
|
228
|
-
@m.set @key1, @value
|
229
|
-
@m.set @key2, @value
|
230
|
-
@m.set @key3, @value
|
231
|
-
@m.get @key1
|
232
|
-
@m.get @key2
|
233
|
-
@m.get @key3
|
234
|
-
@m.set @key1, @value
|
235
|
-
@m.get @key1
|
236
|
-
@m.set @key2, @value
|
237
|
-
@m.get @key2
|
238
|
-
@m.set @key3, @value
|
239
|
-
@m.get @key3
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
restart_servers
|
244
|
-
|
245
|
-
n = 10000
|
246
|
-
Memcached::HASH_VALUES.each do |mode,|
|
247
|
-
@m = Memcached.new(@opts[0], @opts[1].merge(:hash => mode))
|
248
|
-
x.report("hash:#{mode}:memcached") do
|
249
|
-
n.times do
|
250
|
-
@m.set @key1, @marshalled, 0, false
|
251
|
-
@m.get @key1, false
|
252
|
-
@m.set @key2, @marshalled, 0, false
|
253
|
-
@m.get @key2, false
|
254
|
-
@m.set @key3, @marshalled, 0, false
|
255
|
-
@m.get @key3, false
|
256
|
-
end
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|