aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/cache/mem_cache_store.rb
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2008-01-03 21:05:12 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2008-01-03 21:05:12 +0000
commit2a9ad9ccbc706e546bf02ec95f864944e7d7983b (patch)
tree868624e91f037840bfbf0aca30bb2ea1c9d78701 /activesupport/lib/active_support/cache/mem_cache_store.rb
parent288553540b5b2f37497cb19357b25ac12e0498fd (diff)
downloadrails-2a9ad9ccbc706e546bf02ec95f864944e7d7983b.tar.gz
rails-2a9ad9ccbc706e546bf02ec95f864944e7d7983b.tar.bz2
rails-2a9ad9ccbc706e546bf02ec95f864944e7d7983b.zip
Moved the caching stores from ActionController::Caching::Fragments::* to ActiveSupport::Cache::*. If you're explicitly referring to a store, like ActionController::Caching::Fragments::MemoryStore, you need to update that reference with ActiveSupport::Cache::MemoryStore [DHH] Deprecated ActionController::Base.fragment_cache_store for ActionController::Base.cache_store [DHH] All fragment cache keys are now by default prefixed with the 'views/' namespace [DHH] Added ActiveRecord::Base.cache_key to make it easier to cache Active Records in combination with the new ActiveSupport::Cache::* libraries [DHH] Added ActiveSupport::Gzip.decompress/compress(source) as an easy wrapper for Zlib [Tobias Luetke] Included MemCache-Client to make the improved ActiveSupport::Cache::MemCacheStore work out of the box [Bob Cottrell, Eric Hodel] Added config.cache_store to environment options to control the default cache store (default is FileStore if tmp/cache is present, otherwise MemoryStore is used) [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8546 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib/active_support/cache/mem_cache_store.rb')
-rw-r--r--activesupport/lib/active_support/cache/mem_cache_store.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/cache/mem_cache_store.rb b/activesupport/lib/active_support/cache/mem_cache_store.rb
new file mode 100644
index 0000000000..5820d15cc5
--- /dev/null
+++ b/activesupport/lib/active_support/cache/mem_cache_store.rb
@@ -0,0 +1,51 @@
+require 'memcache'
+
+module ActiveSupport
+ module Cache
+ class MemCacheStore < Store
+ attr_reader :addresses
+
+ def initialize(*addresses)
+ addresses = addresses.flatten
+ addresses = ["localhost"] if addresses.empty?
+ @addresses = addresses
+ @data = MemCache.new(*addresses)
+ end
+
+ def read(key, options = nil)
+ super
+ @data.get(key, raw?(options))
+ rescue MemCache::MemCacheError
+ nil
+ end
+
+ def write(key, value, options = nil)
+ super
+ @data.set(key, value, expires_in(options), raw?(options))
+ rescue MemCache::MemCacheError
+ nil
+ end
+
+ def delete(key, options = nil)
+ super
+ @data.delete(key, expires_in(options))
+ rescue MemCache::MemCacheError
+ nil
+ end
+
+ def delete_matched(matcher, options = nil)
+ super
+ raise "Not supported by Memcache"
+ end
+
+ private
+ def expires_in(options)
+ (options && options[:expires_in]) || 0
+ end
+
+ def raw?(options)
+ options && options[:raw]
+ end
+ end
+ end
+end