cache 0.2.7 → 0.3.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.
- data/Gemfile +8 -0
- data/README.md +47 -28
- data/benchmarks/afterrefactor.txt +86 -0
- data/benchmarks/midrefactor.txt +89 -0
- data/cache.gemspec +0 -8
- data/lib/cache.rb +86 -65
- data/lib/cache/active_support_cache_dalli_store.rb +14 -0
- data/lib/cache/active_support_cache_memory_store.rb +10 -0
- data/lib/cache/active_support_cache_store.rb +37 -0
- data/lib/cache/config.rb +0 -32
- data/lib/cache/dalli_client.rb +46 -0
- data/lib/cache/mem_cache.rb +41 -0
- data/lib/cache/memcached.rb +47 -0
- data/lib/cache/memcached_rails.rb +33 -0
- data/lib/cache/redis.rb +38 -0
- data/lib/cache/redis_namespace.rb +6 -0
- data/lib/cache/version.rb +1 -1
- data/test/helper.rb +4 -0
- data/test/shared_tests.rb +1 -18
- data/test/test_dalli_storage.rb +1 -1
- data/test/test_dalli_store_storage.rb +1 -1
- data/test/test_default_storage.rb +5 -5
- data/test/test_memcache_storage.rb +1 -1
- data/test/test_memcached_rails_storage.rb +1 -1
- data/test/test_memcached_storage.rb +4 -1
- data/test/test_rails_cache_storage.rb +17 -15
- data/test/test_redis_storage.rb +1 -1
- metadata +13 -131
- data/lib/cache/storage.rb +0 -260
@@ -10,7 +10,7 @@ class TestMemcachedStorage < Test::Unit::TestCase
|
|
10
10
|
include SharedTests
|
11
11
|
|
12
12
|
def get_bare_id
|
13
|
-
@cache.
|
13
|
+
@cache.thread_metal.object_id
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_treats_as_not_thread_safe
|
@@ -29,6 +29,9 @@ class TestMemcachedStorage < Test::Unit::TestCase
|
|
29
29
|
|
30
30
|
# make sure the bare client was reinitialized
|
31
31
|
assert(main_thread_bare_id != new_thread_bare_id)
|
32
|
+
|
33
|
+
# make sure the main thread's client wasn't messed with
|
34
|
+
assert_equal main_thread_bare_id, get_bare_id
|
32
35
|
end
|
33
36
|
|
34
37
|
def test_treats_as_not_fork_safe
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
+
require 'memcached'
|
3
4
|
require 'active_support/cache'
|
4
5
|
require 'active_support/cache/memory_store'
|
5
6
|
|
@@ -8,7 +9,7 @@ class TestRailsCacheStorage < Test::Unit::TestCase
|
|
8
9
|
eval %{
|
9
10
|
module ::Rails
|
10
11
|
def self.cache
|
11
|
-
@cache || :
|
12
|
+
@cache || Memcached::Rails.new('localhost:11211', :support_cas => true)
|
12
13
|
end
|
13
14
|
def self.cache=(foo)
|
14
15
|
@cache = foo
|
@@ -22,44 +23,45 @@ class TestRailsCacheStorage < Test::Unit::TestCase
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def test_defaults_to_rails_cache
|
25
|
-
assert_equal
|
26
|
+
assert_equal Memcached::Rails, Cache.new.metal.class
|
26
27
|
end
|
27
28
|
|
28
29
|
def test_helpful_default
|
30
|
+
eval %{
|
31
|
+
module ::Rails
|
32
|
+
def self.cache
|
33
|
+
@cache
|
34
|
+
end
|
35
|
+
end
|
36
|
+
}
|
29
37
|
Rails.cache = Cache.new
|
30
|
-
assert_equal ActiveSupport::Cache::MemoryStore, Rails.cache.
|
38
|
+
assert_equal ActiveSupport::Cache::MemoryStore, Rails.cache.metal.class
|
31
39
|
end
|
32
40
|
|
33
41
|
def test_explicitly_set
|
34
42
|
c = Cache.new(Rails.cache)
|
35
|
-
assert_equal
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_explicitly_set_2
|
39
|
-
c = Cache.new
|
40
|
-
c.config.client = Rails.cache
|
41
|
-
assert_equal :deadbeef, c.config.client
|
43
|
+
assert_equal Memcached::Rails, c.metal.class
|
42
44
|
end
|
43
45
|
|
44
|
-
# these behave strangely because they resolve the value of Rails.cache (e.g.,
|
46
|
+
# these behave strangely because they resolve the value of Rails.cache (e.g., Memcached::Rails) before returning
|
45
47
|
def test_silly_self_reference
|
46
48
|
Rails.cache = Cache.new(Rails.cache)
|
47
|
-
assert_equal
|
49
|
+
assert_equal Memcached::Rails, Rails.cache.metal.class
|
48
50
|
end
|
49
51
|
|
50
52
|
def test_self_reference_twice
|
51
53
|
Rails.cache = Cache.new(Cache.new)
|
52
|
-
assert_equal
|
54
|
+
assert_equal Memcached::Rails, Rails.cache.metal.class
|
53
55
|
end
|
54
56
|
|
55
57
|
def test_self_reference_with_wrap
|
56
58
|
Rails.cache = Cache.wrap(Cache.new)
|
57
|
-
assert_equal
|
59
|
+
assert_equal Memcached::Rails, Rails.cache.metal.class
|
58
60
|
end
|
59
61
|
|
60
62
|
def test_self_reference_with_absurd_wrapping
|
61
63
|
Rails.cache = Cache.new(Cache.wrap(Cache.new))
|
62
|
-
assert_equal
|
64
|
+
assert_equal Memcached::Rails, Rails.cache.metal.class
|
63
65
|
end
|
64
66
|
#--
|
65
67
|
end
|
data/test/test_redis_storage.rb
CHANGED
@@ -14,7 +14,7 @@ if ENV['REDIS_URL']
|
|
14
14
|
|
15
15
|
# client DOT client
|
16
16
|
def get_redis_client_connection_socket_id
|
17
|
-
connection = @cache.
|
17
|
+
connection = @cache.metal.client.instance_variable_get :@connection
|
18
18
|
sock = connection.instance_variable_get(:@sock)
|
19
19
|
# $stderr.puts sock.inspect
|
20
20
|
sock.object_id
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-04-
|
13
|
+
date: 2012-04-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -44,134 +44,6 @@ dependencies:
|
|
44
44
|
- - ! '>='
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: yard
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
|
-
requirements:
|
52
|
-
- - ! '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
type: :development
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ! '>='
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: test-unit
|
65
|
-
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
|
-
requirements:
|
68
|
-
- - ! '>='
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '0'
|
71
|
-
type: :development
|
72
|
-
prerelease: false
|
73
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
|
-
requirements:
|
76
|
-
- - ! '>='
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: '0'
|
79
|
-
- !ruby/object:Gem::Dependency
|
80
|
-
name: redis
|
81
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
|
-
requirements:
|
84
|
-
- - ! '>='
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: '0'
|
87
|
-
type: :development
|
88
|
-
prerelease: false
|
89
|
-
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
|
-
requirements:
|
92
|
-
- - ! '>='
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
version: '0'
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: redis-namespace
|
97
|
-
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
|
-
requirements:
|
100
|
-
- - ! '>='
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '0'
|
103
|
-
type: :development
|
104
|
-
prerelease: false
|
105
|
-
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
|
-
requirements:
|
108
|
-
- - ! '>='
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: dalli
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
|
-
requirements:
|
116
|
-
- - ! '>='
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
|
-
requirements:
|
124
|
-
- - ! '>='
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '0'
|
127
|
-
- !ruby/object:Gem::Dependency
|
128
|
-
name: memcached
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
|
-
requirements:
|
132
|
-
- - ! '>='
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
version: '0'
|
135
|
-
type: :development
|
136
|
-
prerelease: false
|
137
|
-
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
|
-
requirements:
|
140
|
-
- - ! '>='
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
version: '0'
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: memcache-client
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
|
-
requirements:
|
148
|
-
- - ! '>='
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: '0'
|
151
|
-
type: :development
|
152
|
-
prerelease: false
|
153
|
-
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
|
-
requirements:
|
156
|
-
- - ! '>='
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '0'
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: rake
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
|
-
requirements:
|
164
|
-
- - ! '>='
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
|
-
type: :development
|
168
|
-
prerelease: false
|
169
|
-
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
|
-
requirements:
|
172
|
-
- - ! '>='
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
version: '0'
|
175
47
|
description: Wraps memcached, redis(-namespace), memcache-client, dalli and handles
|
176
48
|
their weirdnesses, including forking
|
177
49
|
email:
|
@@ -185,6 +57,8 @@ files:
|
|
185
57
|
- Gemfile
|
186
58
|
- README.md
|
187
59
|
- Rakefile
|
60
|
+
- benchmarks/afterrefactor.txt
|
61
|
+
- benchmarks/midrefactor.txt
|
188
62
|
- benchmarks/v0.0.2.txt
|
189
63
|
- benchmarks/v0.0.3.txt
|
190
64
|
- benchmarks/v0.1.2.txt
|
@@ -192,8 +66,16 @@ files:
|
|
192
66
|
- benchmarks/v0.2.2.txt
|
193
67
|
- cache.gemspec
|
194
68
|
- lib/cache.rb
|
69
|
+
- lib/cache/active_support_cache_dalli_store.rb
|
70
|
+
- lib/cache/active_support_cache_memory_store.rb
|
71
|
+
- lib/cache/active_support_cache_store.rb
|
195
72
|
- lib/cache/config.rb
|
196
|
-
- lib/cache/
|
73
|
+
- lib/cache/dalli_client.rb
|
74
|
+
- lib/cache/mem_cache.rb
|
75
|
+
- lib/cache/memcached.rb
|
76
|
+
- lib/cache/memcached_rails.rb
|
77
|
+
- lib/cache/redis.rb
|
78
|
+
- lib/cache/redis_namespace.rb
|
197
79
|
- lib/cache/version.rb
|
198
80
|
- test/helper.rb
|
199
81
|
- test/profile/benchmark.rb
|
data/lib/cache/storage.rb
DELETED
@@ -1,260 +0,0 @@
|
|
1
|
-
class Cache
|
2
|
-
class Storage #:nodoc: all
|
3
|
-
|
4
|
-
attr_reader :parent
|
5
|
-
|
6
|
-
def initialize(parent)
|
7
|
-
@parent = parent
|
8
|
-
@pid = ::Process.pid
|
9
|
-
@thread_object_id = ::Thread.current.object_id
|
10
|
-
end
|
11
|
-
|
12
|
-
def get(k)
|
13
|
-
reset_if_forked_or_threaded
|
14
|
-
if memcached?
|
15
|
-
begin; bare.get(k); rescue ::Memcached::NotFound; nil; end
|
16
|
-
elsif dalli? or memcached_rails? or mem_cache?
|
17
|
-
bare.get k
|
18
|
-
elsif redis?
|
19
|
-
if cached_v = bare.get(k) and cached_v.is_a?(::String)
|
20
|
-
::Marshal.load cached_v
|
21
|
-
end
|
22
|
-
elsif active_support_store? or dalli_store?
|
23
|
-
bare.read k
|
24
|
-
else
|
25
|
-
raise "Don't know how to GET with #{bare.inspect}"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def get_multi(ks)
|
30
|
-
reset_if_forked_or_threaded
|
31
|
-
if memcached?
|
32
|
-
bare.get ks
|
33
|
-
elsif memcached_rails? or dalli? or mem_cache?
|
34
|
-
bare.get_multi ks
|
35
|
-
elsif active_support_store? or dalli_store?
|
36
|
-
bare.read_multi *ks
|
37
|
-
else
|
38
|
-
ks.inject({}) do |memo, k|
|
39
|
-
memo[k] = get k if exist? k
|
40
|
-
memo
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def set(k, v, ttl)
|
46
|
-
reset_if_forked_or_threaded
|
47
|
-
if memcached? or dalli? or memcached_rails? or mem_cache?
|
48
|
-
bare.set k, v, ttl
|
49
|
-
elsif redis?
|
50
|
-
if ttl == 0
|
51
|
-
bare.set k, ::Marshal.dump(v)
|
52
|
-
else
|
53
|
-
bare.setex k, ttl, ::Marshal.dump(v)
|
54
|
-
end
|
55
|
-
elsif active_support_store? or dalli_store?
|
56
|
-
if ttl == 0
|
57
|
-
bare.write k, v # never expire
|
58
|
-
else
|
59
|
-
bare.write k, v, :expires_in => ttl
|
60
|
-
end
|
61
|
-
else
|
62
|
-
raise "Don't know how to SET with #{bare.inspect}"
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def delete(k)
|
67
|
-
reset_if_forked_or_threaded
|
68
|
-
if memcached?
|
69
|
-
begin; bare.delete(k); rescue ::Memcached::NotFound; nil; end
|
70
|
-
elsif redis?
|
71
|
-
bare.del k
|
72
|
-
elsif dalli? or memcached_rails? or mem_cache? or active_support_store? or dalli_store?
|
73
|
-
bare.delete k
|
74
|
-
else
|
75
|
-
raise "Don't know how to DELETE with #{bare.inspect}"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def flush
|
80
|
-
reset_if_forked_or_threaded
|
81
|
-
bare.send %w{ flush flushdb flush_all clear }.detect { |flush_cmd| bare.respond_to? flush_cmd }
|
82
|
-
end
|
83
|
-
|
84
|
-
# TODO detect nils
|
85
|
-
def exist?(k)
|
86
|
-
reset_if_forked_or_threaded
|
87
|
-
if memcached?
|
88
|
-
begin; bare.get(k); true; rescue ::Memcached::NotFound; false; end
|
89
|
-
elsif redis?
|
90
|
-
bare.exists k
|
91
|
-
elsif bare.respond_to?(:exist?)
|
92
|
-
# slow because we're looking it up
|
93
|
-
bare.exist? k
|
94
|
-
else
|
95
|
-
# weak because it doesn't detect keys that equal nil
|
96
|
-
!get(k).nil?
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
# TODO use native memcached increment if available
|
101
|
-
# TODO don't reset the timer!
|
102
|
-
def increment(k, amount)
|
103
|
-
# reset_if_forked_or_threaded - uses get
|
104
|
-
new_v = get(k).to_i + amount
|
105
|
-
set k, new_v, 0
|
106
|
-
new_v
|
107
|
-
end
|
108
|
-
|
109
|
-
def decrement(k, amount)
|
110
|
-
# reset_if_forked_or_threaded - uses increment, which uses get
|
111
|
-
increment k, -amount
|
112
|
-
end
|
113
|
-
|
114
|
-
# TODO don't resort to trickery like this
|
115
|
-
def reset
|
116
|
-
@pid = nil
|
117
|
-
end
|
118
|
-
|
119
|
-
def fetch(k, ttl, &blk)
|
120
|
-
reset_if_forked_or_threaded
|
121
|
-
if dalli? or mem_cache?
|
122
|
-
bare.fetch k, ttl, &blk
|
123
|
-
elsif active_support_store?
|
124
|
-
bare.fetch k, { :expires_in => ttl }, &blk
|
125
|
-
else
|
126
|
-
if exist? k
|
127
|
-
get k
|
128
|
-
elsif blk
|
129
|
-
v = blk.call
|
130
|
-
set k, v, ttl
|
131
|
-
v
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def cas(k, ttl, &blk)
|
137
|
-
reset_if_forked_or_threaded
|
138
|
-
if memcached?
|
139
|
-
begin; bare.cas(k, ttl, &blk); rescue ::Memcached::NotFound; nil; end
|
140
|
-
elsif dalli? or memcached_rails?
|
141
|
-
bare.cas k, ttl, &blk
|
142
|
-
elsif blk and exist?(k)
|
143
|
-
old_v = get k
|
144
|
-
new_v = blk.call old_v
|
145
|
-
set k, new_v, ttl
|
146
|
-
new_v
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
def stats
|
151
|
-
reset_if_forked_or_threaded
|
152
|
-
if bare.respond_to?(:stats)
|
153
|
-
bare.stats
|
154
|
-
else
|
155
|
-
{}
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
private
|
160
|
-
|
161
|
-
def bare
|
162
|
-
@bare ||= parent.config.client
|
163
|
-
end
|
164
|
-
|
165
|
-
def reset_if_forked_or_threaded
|
166
|
-
if fork_detected?
|
167
|
-
# $stderr.puts "fork detected" if ENV['CACHE_DEBUG'] == 'true'
|
168
|
-
if dalli?
|
169
|
-
parent.config.client.close
|
170
|
-
elsif dalli_store?
|
171
|
-
parent.config.client.reset
|
172
|
-
elsif memcached? or memcached_rails?
|
173
|
-
cloned_client = parent.config.client.clone
|
174
|
-
parent.config.client = cloned_client
|
175
|
-
@bare = parent.config.client
|
176
|
-
elsif redis?
|
177
|
-
parent.config.client.client.connect
|
178
|
-
elsif mem_cache?
|
179
|
-
parent.config.client.reset
|
180
|
-
end
|
181
|
-
elsif new_thread_detected?
|
182
|
-
# $stderr.puts "new thread detected" if ENV['CACHE_DEBUG'] == 'true'
|
183
|
-
if memcached? or memcached_rails?
|
184
|
-
cloned_client = parent.config.client.clone
|
185
|
-
parent.config.client = cloned_client
|
186
|
-
@bare = parent.config.client
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
def fork_detected?
|
192
|
-
if @pid != ::Process.pid
|
193
|
-
@pid = ::Process.pid
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def new_thread_detected?
|
198
|
-
if @thread_object_id != ::Thread.current.object_id
|
199
|
-
@thread_object_id = ::Thread.current.object_id
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
def dalli?
|
204
|
-
return @dalli_query[0] if @dalli_query.is_a?(::Array)
|
205
|
-
answer = (defined?(::Dalli) and bare.is_a?(::Dalli::Client))
|
206
|
-
@dalli_query = [answer]
|
207
|
-
answer
|
208
|
-
end
|
209
|
-
|
210
|
-
def active_support_store?
|
211
|
-
return @active_support_store_query[0] if @active_support_store_query.is_a?(::Array)
|
212
|
-
answer = (defined?(::ActiveSupport::Cache) and bare.is_a?(::ActiveSupport::Cache::Store))
|
213
|
-
@active_support_store_query = [answer]
|
214
|
-
answer
|
215
|
-
end
|
216
|
-
|
217
|
-
def dalli_store?
|
218
|
-
return @dalli_store_query[0] if @dalli_store_query.is_a?(::Array)
|
219
|
-
answer = (defined?(::ActiveSupport::Cache::DalliStore) and bare.is_a?(::ActiveSupport::Cache::DalliStore))
|
220
|
-
@dalli_store_query = [answer]
|
221
|
-
answer
|
222
|
-
end
|
223
|
-
|
224
|
-
def memory_store?
|
225
|
-
return @memory_store_query[0] if @memory_store_query.is_a?(::Array)
|
226
|
-
answer = (defined?(::ActiveSupport::Cache::MemoryStore) and bare.is_a?(::ActiveSupport::Cache::MemoryStore))
|
227
|
-
@memory_store_query = [answer]
|
228
|
-
answer
|
229
|
-
end
|
230
|
-
|
231
|
-
def mem_cache?
|
232
|
-
return @mem_cache_query[0] if @mem_cache_query.is_a?(::Array)
|
233
|
-
answer = (defined?(::MemCache) and bare.is_a?(::MemCache))
|
234
|
-
@mem_cache_query = [answer]
|
235
|
-
answer
|
236
|
-
end
|
237
|
-
|
238
|
-
def memcached?
|
239
|
-
return @memcached_query[0] if @memcached_query.is_a?(::Array)
|
240
|
-
answer = (defined?(::Memcached) and bare.is_a?(::Memcached) and not bare.is_a?(::Memcached::Rails))
|
241
|
-
@memcached_query = [answer]
|
242
|
-
answer
|
243
|
-
end
|
244
|
-
|
245
|
-
def memcached_rails?
|
246
|
-
return @memcached_rails_query[0] if @memcached_rails_query.is_a?(::Array)
|
247
|
-
answer = (defined?(::Memcached) and bare.is_a?(::Memcached::Rails))
|
248
|
-
@memcached_rails_query = [answer]
|
249
|
-
answer
|
250
|
-
end
|
251
|
-
|
252
|
-
def redis?
|
253
|
-
return @redis_query[0] if @redis_query.is_a?(::Array)
|
254
|
-
answer = (defined?(::Redis) and bare.is_a?(::Redis)) || (defined?(::Redis::Namespace) and bare.is_a?(::Redis::Namespace))
|
255
|
-
@redis_query = [answer]
|
256
|
-
answer
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|