aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/cache.rb
Commit message (Collapse)AuthorAgeFilesLines
* Preserve key order passed to ActiveSupport::CacheStore#fetch_multiGannon McGibbon2018-12-271-9/+9
| | | | | | fetch_multi(*names) now returns its results in the same order as the `*names` requested, rather than returning cache hits followed by cache misses.
* Merge pull request #34056 from CaDs/CaDs-extend_documentation_for_fetch_multiRichard Schneeman2018-10-161-2/+11
|\ | | | | Extend doc for ActiveSupport::Cache#fetch_multi
| * Extends documentation for ActiveSupport::Cache#fetch_multi [ci skip]Carlos Donderis2018-10-161-2/+11
| |
* | Array with single item correctly uses cache_keyGraham Turner2018-10-051-1/+1
| |
* | Merge pull request #33936 from schneems/schneems/cache-micro-optimizationsRichard Schneeman2018-10-041-2/+6
|\ \ | |/ |/| Decrease memory allocations in cache.rb
| * Decrease memory allocations in cache.rbschneems2018-09-211-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `merged_options` method is private and the output is never mutated. Using this info we can get rid of the `dup` behavior. We can also eliminate the `merge` call in the case where all the options being merged are the same. Returned results are frozen as an extra layer of protection against mutation. Before ``` Total allocated: 741749 bytes (6642 objects) ``` After ``` Total allocated: 734039 bytes (6648 objects) ``` Diff ``` (741749 - 734039) / 741749.0 => ~ 1.0 % ``` If you don't feel comfortable modifying this method, we could rename it and only use it internally.
* | Change the empty block style to have space inside of the blockRafael Mendonça França2018-09-251-1/+1
|/
* Support skip nil for cache fetch (#25437)Martin2018-08-051-1/+9
| | | | | | | | | | | | * test case for fetch cache miss with skip_nil * abondon nil cache if skip_nil specified * ensure not cache key for skip nil * add document with skip_nil for Store#fetch * add a new change log entry for #25437
* Merge pull request #32539 from chancancode/anticompressRafael França2018-04-121-35/+32
|\ | | | | Fix ActiveSupport::Cache compression
| * Fix `ActiveSupport::Cache` compressionGodfrey Chan2018-04-111-35/+32
| | | | | | | | (See previous commit for a description of the issue)
* | Cache::Store#read: Fix fixed-width end tag in docsTeddy Wing2018-04-121-2/+3
|/ | | | | | | | * Fix the ending `</tt>` tag for `:expires_in`. Otherwise, the "or" is set in fixed-width also. * Re-wrap paragraph to 80 columns. [ci skip]
* Don't marshal ActiveSupport::Cache::Entry objects twiceSean Griffin2018-03-141-13/+14
| | | | | | | | | When upgrading to Rails 5.2 we're seeing `ActiveSupport::Cache::Entry#compress` and `ActiveSupport::Cache::Entry#should_compress?` as the highest usage of our CPU. At least some part of this is coming from the fact that objects are being marshaled multiple times. This memoizes the marshaled value to eliminate half the problem.
* Add support for connection pooling on RedisCacheStorefatkodima2018-02-011-0/+17
|
* Revert "Merge pull request #31447 from fatkodima/redis_cache-connection_pool"George Claghorn2018-01-311-17/+0
| | | | | This reverts commit ac74e2c521f6ddc0eac02d74a1313261bcc1d60f, reversing changes made to ffdb06136152b3c5f7f4a93ca5928e16e755d228.
* Add support for connection pooling on RedisCacheStorefatkodima2018-01-221-0/+17
|
* add instrumentation for read_multiIgnatius Reza2017-12-291-21/+36
| | | | currently it's not possible to know what the hit rates are from read_multi
* Revert "Remove code duplication in ActiveSupport::Cache"George Claghorn2017-12-221-11/+26
| | | | This reverts commit 57f0e3d1300d01444d2a311560c055d26968dc3f.
* Cache: Enable compression by default for values > 1kB.Jeremy Daer2017-11-131-11/+9
| | | | | | | | | | | | | Compression has long been available, but opt-in and at a 16kB threshold. It wasn't enabled by default due to CPU cost. Today it's cheap and typical cache data is eminently compressible, such as HTML or JSON fragments. Compression dramatically reduces Memcached/Redis mem usage, which means the same cache servers can store more data, which means higher hit rates. To disable compression, pass `compress: false` to the initializer.
* Built-in Redis cache storeJeremy Daer2017-11-131-12/+33
| | | | | | | | | | | * Supports vanilla Redis, hiredis, and Redis::Distributed. * Supports Memcached-like sharding across Redises with Redis::Distributed. * Fault tolerant. If the Redis server is unavailable, no exceptions are raised. Cache fetches are treated as misses and writes are dropped. * Local cache. Hot in-memory primary cache within block/middleware scope. * `read_/write_multi` support for Redis mget/mset. Use Redis::Distributed 4.0.1+ for distributed mget support. * `delete_matched` support for Redis KEYS globs.
* Remove code duplication in ActiveSupport::CacheBogdan Gusiev2017-11-091-26/+11
|
* [Active Support] require_relative => requireAkira Matsuda2017-10-211-7/+7
| | | | This basically reverts 8da30ad6be34339124ba4cb4e36aea260dda12bc
* explain why require_relative is not used here [ci skip]Xavier Noria2017-07-161-0/+2
|
* Fix configuring third-party cache stores such as ↵George Claghorn2017-07-121-1/+1
| | | | | | ActiveSupport::Cache::RedisStore Broken in 8da30ad.
* [Active Support] `rubocop -a --only Layout/EmptyLineAfterMagicComment`Koichi ITO2017-07-111-0/+1
|
* Use frozen-string-literal in ActiveSupportKir Shatrov2017-07-091-0/+1
|
* Merge branch 'master' into require_relative_2017Xavier Noria2017-07-021-1/+1
|\
| * Revert "Merge pull request #29540 from kirs/rubocop-frozen-string"Matthew Draper2017-07-021-1/+0
| | | | | | | | | | This reverts commit 3420a14590c0e6915d8b6c242887f74adb4120f9, reversing changes made to afb66a5a598ce4ac74ad84b125a5abf046dcf5aa.
| * Merge pull request #29540 from kirs/rubocop-frozen-stringMatthew Draper2017-07-021-0/+1
| |\ | | | | | | | | | Enforce frozen string in Rubocop
| | * Enforce frozen string in RubocopKir Shatrov2017-07-011-0/+1
| | |
| * | Make ActiveSupport frozen string literal friendly.Pat Allan2017-06-201-1/+1
| |/ | | | | | | | | | | | | The ActiveSupport test suite only passes currently if it uses the latest unreleased commits for dalli, and a patch for Builder: https://github.com/tenderlove/builder/pull/6 Beyond that, all external dependencies (at least, to the extent they’re used by ActiveSupport) are happy, including Nokogiri as of 1.8.0.
* / [Active Support] require => require_relativeAkira Matsuda2017-07-011-8/+8
|/
* Revert #25628. Incomplete change + needs a deprecation cycle.Jeremy Daer2017-06-101-1/+1
| | | | | | | | | See https://github.com/rails/rails/issues/29067#issuecomment-301342084 for rationale. This reverts commit b76f82d714e590c20370e72fa36fa574c4f17650. Fixes #29067. Fixes #29081.
* Cache: write_multi (#29366)Jeremy Daer2017-06-061-6/+28
| | | | | | | | | | | Rails.cache.write_multi foo: 'bar', baz: 'qux' Plus faster `fetch_multi` with stores that implement `write_multi_entries`. Keys that aren't found may be written to the cache store in one shot instead of separate writes. The default implementation simply calls `write_entry` for each entry. Stores may override if they're capable of one-shot bulk writes, like Redis `MSET`.
* Fix a RuboCop offences using `rubocop -a`Koichi ITO2017-05-241-2/+0
|
* Remove unused mismatch payload attributeDavid Heinemeier Hansson2017-05-201-5/+1
|
* Add cache_key_with_version and use it in ActiveSupport::Cache.expand_cache_keyDavid Heinemeier Hansson2017-05-191-4/+5
| | | | | | This retains the existing behavior of ActiveSupport::Cache.expand_cache_key (as used by etaging) where the cache key includes the version.
* Use recyclable cache keys (#29092)David Heinemeier Hansson2017-05-181-17/+61
|
* Revert "Merge pull request #28788 from ↵Rafael Mendonça França2017-04-181-1/+0
| | | | | | | | | | | | | tjschuck/require_as_notifications_in_cache" This reverts commit b86631d9d9f12d834868ff44735ff551668bfb8a, reversing changes made to 8776a7139757d0b264785c774d4e7f37d4bc1ac7. ActiveSupport::Notifications is loaded using autoload that is defined by the top level file of `active_support`. All the frameworks of Rails requires the top level files before using any of the others files inside the framework because the top level file is what setup the autoload hooks and require the common dependencies.
* Explicitly require AS::Notifications in AS::CacheT.J. Schuck2017-04-171-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Right now, if you install the current release version of Active Support (5.0.2) and try to use its cache implementation standalone by requiring `active_support/cache`, it crashes with `NameError: uninitialized constant ActiveSupport::Notifications`. `AS::Notifications` is used in `cache.rb` down around [line 555](https://github.com/rails/rails/blob/8776a7139757d0b264785c774d4e7f37d4bc1ac7/activesupport/lib/active_support/cache.rb#L555). Here's a quick repro script: ```ruby require "bundler/inline" gemfile(true) do source "https://rubygems.org" gem "activesupport", "5.0.2" end require "active_support/cache" cache_store = ActiveSupport::Cache::MemoryStore.new cache_store.write('test', 'okay') puts cache_store.read('test') ``` However, any version _newer_ than 5.0.2 passes. This is because [this commit](https://github.com/rails/rails/commit/75924c4517c8f87712d3f59c11f10152ed57b9d8) inadvertently included `AS::Notifications` into `AS::Cache` (thus fixing the issue) by mixing [`AS::Deprecation` into `AS::Duration`](https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/duration.rb#L4), giving you a nice require chain of [`Cache` including `Time`][1] [including `Duration`][2] [including `Deprecation`][3] [including `Behaviors`][4] [including `Notifications`][5]. Phew. Aside from being not very explicit, the fact that the fixing is specifically done by `AS::Deprecation` means that this fix is probably only temporary (until the deprecation is removed). This PR just makes the inclusion explicit to future-proof against this breakage. (Ideally, this would also be backported to `5-0-stable` to get picked up in any subsequent point release.) See also: https://github.com/rails/rails/pull/14667 [1]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/cache.rb#L6 [2]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/time.rb#L2 [3]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/duration.rb#L4 [4]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/deprecation.rb#L16 [5]: https://github.com/rails/rails/blob/75924c4517c8f87712d3f59c11f10152ed57b9d8/activesupport/lib/active_support/deprecation/behaviors.rb#L1
* Remove unused requireRyuta Kamizono2017-02-121-1/+0
| | | | | | These files are not using `strip_heredoc`. Closes #27976
* Fix sample code for `expand_cache_key` usage [ci skip]kenta-s2017-01-241-2/+2
|
* Privatize unneededly protected methods in Active SupportAkira Matsuda2016-12-241-6/+5
|
* No need to nodoc private methodsAkira Matsuda2016-12-241-2/+2
|
* Remove deprecated namespaced_keyAndrew White2016-11-131-8/+0
|
* Add more rubocop rules about whitespacesRafael Mendonça França2016-10-291-1/+1
|
* Merge pull request #26531 from y-yagi/remove_unused_benchmarkRafael França2016-10-101-2/+0
|\ | | | | remove unused require `benchmark`
| * remove unused require `benchmark`yuuji.yaginuma2016-09-171-2/+0
| | | | | | | | `Benchmark` was removed at 4215e9a
* | Merge pull request #26524 from y-yagi/add_check_of_argumentRichard Schneeman2016-09-221-0/+5
|\ \ | | | | | | add check of argument
| * | add check of argumentyuuji.yaginuma2016-09-171-0/+5
| |/ | | | | | | | | | | | | `#fetch_multi` in case did not cache hit, to write a cache using the block value. https://github.com/rails/rails/blob/master/activesupport/lib/active_support/cache.rb#L383..L384 Therefore, block is a need to pass always, I think should check first.
* / fix formatting of `Cache::Store#fetch` [ci skip]yuuji.yaginuma2016-09-171-3/+3
|/ | | | Single backticks don't work with rdoc.