memcached 0.6 → 0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|