tokyo_cache_cow 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +16 -1
- data/VERSION.yml +2 -2
- data/lib/tokyo_cache_cow/cache/base.rb +26 -2
- data/lib/tokyo_cache_cow/server.rb +5 -5
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= Tokyo Cache Cow
|
2
2
|
|
3
|
-
Tokyo Cache Cow is MemCache protocol speaking cache server. It offers the ability to delete keys based on a substring.
|
3
|
+
Tokyo Cache Cow is MemCache protocol speaking cache server. It offers the ability to delete keys based on a substring as well as aggregate functions based on substrings.
|
4
4
|
|
5
5
|
== Motivation
|
6
6
|
|
@@ -60,6 +60,21 @@ But <i>other_key</i> is still peachy.
|
|
60
60
|
>> Rails.cache.read('other_key')
|
61
61
|
=> "other_value"
|
62
62
|
|
63
|
+
=== Aggregate functions
|
64
|
+
|
65
|
+
You can invoke aggregates by using the prefixes <tt>average-</tt>, <tt>count-</tt>, <tt>sum-</tt>, <tt>min-</tt> and <tt>max-</tt>.
|
66
|
+
|
67
|
+
>> Rails.cache.write('hello1', '1')
|
68
|
+
=> true
|
69
|
+
>> Rails.cache.write('hello2', '2')
|
70
|
+
=> true
|
71
|
+
>> Rails.cache.write('hello3', '3')
|
72
|
+
=> true
|
73
|
+
>> Rails.cache.read('average-hello')
|
74
|
+
=> "2.0"
|
75
|
+
>> Rails.cache.read('sum-hello')
|
76
|
+
=> "6.0"
|
77
|
+
|
63
78
|
|
64
79
|
== Usage
|
65
80
|
|
data/VERSION.yml
CHANGED
@@ -11,11 +11,35 @@ class TokyoCacheCow
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def average_match(match)
|
14
|
-
|
15
|
-
values = average_keys.map{|ak| get(ak)}.map{|v| Integer(v[:value]) rescue nil}.compact
|
14
|
+
values = numeric_values_match(match)
|
16
15
|
values.inject(0.0) { |sum, el| sum + el } / values.size
|
17
16
|
end
|
18
17
|
|
18
|
+
def sum_match(match)
|
19
|
+
values = numeric_values_match(match)
|
20
|
+
values.inject(0.0) { |sum, el| sum + el }
|
21
|
+
end
|
22
|
+
|
23
|
+
def count_match(match)
|
24
|
+
values = numeric_values_match(match)
|
25
|
+
values.size
|
26
|
+
end
|
27
|
+
|
28
|
+
def min_match(match)
|
29
|
+
values = numeric_values_match(match)
|
30
|
+
values.min
|
31
|
+
end
|
32
|
+
|
33
|
+
def max_match(match)
|
34
|
+
values = numeric_values_match(match)
|
35
|
+
values.max
|
36
|
+
end
|
37
|
+
|
38
|
+
def numeric_values_match(match)
|
39
|
+
numeric_keys = get_match(match)
|
40
|
+
numeric_keys.map{|ak| get(ak)}.map{|v| Integer(v[:value]) rescue nil}.compact
|
41
|
+
end
|
42
|
+
|
19
43
|
end
|
20
44
|
end
|
21
45
|
end
|
@@ -101,11 +101,11 @@ class TokyoCacheCow
|
|
101
101
|
keys = args.split(/\s+/)
|
102
102
|
keys.each do |k|
|
103
103
|
next unless validate_key(k)
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
104
|
+
if k =~ /^(average|sum|count|min|max)-(.*)/
|
105
|
+
average = @cache.send(:"#{$1}_match", $2).to_s
|
106
|
+
send_data(GetValueReply % [k, "0", average.size])
|
107
|
+
send_data(average)
|
108
|
+
send_data(Terminator)
|
109
109
|
else
|
110
110
|
if data = @cache.get(k)
|
111
111
|
if command == 'get'
|