Class: Cache::Storage
- Inherits:
-
Object
- Object
- Cache::Storage
- Includes:
- Singleton
- Defined in:
- lib/cache/storage.rb
Overview
:nodoc: all
Instance Method Summary collapse
- #bare_client ⇒ Object
- #delete(k) ⇒ Object
- #flush ⇒ Object
- #fresh_bare_client(fork_detected) ⇒ Object
- #get(k) ⇒ Object
- #set(k, v, ttl) ⇒ Object
Instance Method Details
#bare_client ⇒ Object
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/cache/storage.rb', line 59 def if @pid == ::Process.pid fork_detected = false else fork_detected = true ::Thread.current[:cache_storage_bare_client] = nil @pid = ::Process.pid end ::Thread.current[:cache_storage_bare_client] ||= (fork_detected) end |
#delete(k) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/cache/storage.rb', line 43 def delete(k) if defined?(::Memcached) and .is_a?(::Memcached) begin; .delete(k); rescue ::Memcached::NotFound; nil; end elsif defined?(::Redis) and .is_a?(::Redis) .del k elsif .respond_to?(:delete) .delete k else raise "Don't know how to work with #{.inspect} because it doesn't define delete" end end |
#flush ⇒ Object
55 56 57 |
# File 'lib/cache/storage.rb', line 55 def flush .send %w{ flush flushdb flush_all clear }.detect { |flush_cmd| .respond_to? flush_cmd } end |
#fresh_bare_client(fork_detected) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/cache/storage.rb', line 70 def (fork_detected) if defined?(::Dalli) and Config.instance.client.is_a?(::Dalli::Client) Config.instance.client.close if fork_detected Config.instance.client elsif defined?(::ActiveSupport::Cache::DalliStore) and Config.instance.client.is_a?(::ActiveSupport::Cache::DalliStore) Config.instance.client.reset if fork_detected Config.instance.client elsif defined?(::Memcached) and (Config.instance.client.is_a?(::Memcached) or Config.instance.client.is_a?(::Memcached::Rails)) Config.instance.client.clone elsif defined?(::Redis) and Config.instance.client.is_a?(::Redis) Config.instance.client.client.connect if fork_detected Config.instance.client elsif defined?(::MemCache) and Config.instance.client.is_a?(::MemCache) Config.instance.client.reset if fork_detected Config.instance.client else raise "Don't know how to thread/fork #{Config.instance.client.inspect}" end end |
#get(k) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/cache/storage.rb', line 6 def get(k) if defined?(::Memcached) and .is_a?(::Memcached) begin; .get(k); rescue ::Memcached::NotFound; nil; end elsif defined?(::Redis) and .is_a?(::Redis) if cached_v = .get(k) and cached_v.is_a?(::String) ::Marshal.load cached_v end elsif .respond_to?(:get) .get k elsif .respond_to?(:read) .read k else raise "Don't know how to work with #{.inspect} because it doesn't define get" end end |
#set(k, v, ttl) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/cache/storage.rb', line 22 def set(k, v, ttl) ttl ||= Config.instance.default_ttl if defined?(::Redis) and .is_a?(::Redis) if ttl == 0 .set k, ::Marshal.dump(v) else .setex k, ttl, ::Marshal.dump(v) end elsif .respond_to?(:set) .set k, v, ttl elsif .respond_to?(:write) if ttl == 0 .write k, v # never expire else .write k, v, :expires_in => ttl end else raise "Don't know how to work with #{.inspect} because it doesn't define set" end end |