This project is archived and is in readonly mode.
Changeset [ee51b51b60f9e6cce9babed2c8a65a14d87790c8] by Brian Durand
April 27th, 2010 @ 07:13 PM
ActiveSupport::Cache refactoring
All Caches
- Add default options to initializer that will be sent to all read, write, fetch, exist?, increment, and decrement
- Add support for the :expires_in option to fetch and write for all caches. Cache entries are stored with the create timestamp and a ttl so that expiration can be handled independently of the implementation.
- Add support for a :namespace option. This can be used to set a global prefix for cache entries.
- Deprecate expand_cache_key on ActiveSupport::Cache and move it to ActionController::Caching and ActionDispatch::Http::Cache since the logic in the method used some Rails specific environment variables and was only used by ActionPack classes. Not very DRY but there didn't seem to be a good shared spot and ActiveSupport really shouldn't be Rails specific.
- Add support for :race_condition_ttl to fetch. This setting can prevent race conditions on fetch calls where several processes try to regenerate a recently expired entry at once.
- Add support for :compress option to fetch and write which will compress any data over a configurable threshold.
- Nil values can now be stored in the cache and are distinct from cache misses for fetch.
- Easier API to create new implementations. Just need to implement the methods read_entry, write_entry, and delete_entry instead of overwriting existing methods.
- Since all cache implementations support storing objects, update the docs to state that ActiveCache::Cache::Store implementations should store objects. Keys, however, must be strings since some implementations require that.
- Increase test coverage.
- Document methods which are provided as convenience but which may not be universally available.
MemoryStore
- MemoryStore can now safely be used as the cache for single server sites.
- Make thread safe so that the default cache implementation used by Rails is thread safe. The overhead is minimal and it is still the fastest store available.
- Provide :size initialization option indicating the maximum size of the cache in memory (defaults to 32Mb).
- Add prune logic that removes the least recently used cache entries to keep the cache size from exceeding the max.
- Deprecated SynchronizedMemoryStore since it isn't needed anymore.
FileStore
- Escape key values so they will work as file names on all file systems, be consistent, and case sensitive
- Use a hash algorithm to segment the cache into sub directories so that a large cache doesn't exceed file system limits.
- FileStore can be slow so implement the LocalCache strategy to cache reads for the duration of a request.
- Add cleanup method to keep the disk from filling up with expired entries.
- Fix increment and decrement to use file system locks so they are consistent between processes.
MemCacheStore
- Support all keys. Previously keys with spaces in them would fail
- Deprecate CompressedMemCacheStore since it isn't needed anymore (use :compress => true)
[#4452 state:committed]
Signed-off-by: Jeremy Kemper jeremy@bitsweat.net
http://github.com/rails/rails/commit/ee51b51b60f9e6cce9babed2c8a65a...
Committed by Brian Durand
- M activesupport/CHANGELOG
- M activesupport/lib/active_support/cache.rb
- M activesupport/lib/active_support/cache/compressed_mem_cache_store.rb
- M activesupport/lib/active_support/cache/file_store.rb
- M activesupport/lib/active_support/cache/mem_cache_store.rb
- M activesupport/lib/active_support/cache/memory_store.rb
- M activesupport/lib/active_support/cache/strategy/local_cache.rb
- M activesupport/lib/active_support/cache/synchronized_memory_store.rb
- M activesupport/test/caching_test.rb
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>