aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/cache.rb
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* Merge pull request #25628 from ysksn/optionsRafael Mendonça França2016-08-171-1/+1
|\ | | | | | | Remove parameter "options = nil" for #clear
| * Update CHANGELOG.md for #25628 [ci skip]Yosuke Kabuto2016-07-021-1/+1
| | | | | | | | | | | | Move new CHANGELOG entry top [ci skip] Remove parameter "options = nil" for #clear
* | Add three new rubocop rulesRafael Mendonça França2016-08-161-4/+4
| | | | | | | | | | | | | | | | Style/SpaceBeforeBlockBraces Style/SpaceInsideBlockBraces Style/SpaceInsideHashLiteralBraces Fix all violations in the repository.
* | modernizes hash syntax in activesupportXavier Noria2016-08-061-3/+3
| |
* | applies new string literal convention in activesupport/libXavier Noria2016-08-061-18/+18
|/ | | | | The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
* Change doc for race_condition_ttl option of ↵Dimitris Zorbas2016-06-061-2/+2
| | | | | | | | | ActiveSupport::Cache::Store#fetch [ci skip] The related option of this method, `expires_in` is documented as expecting an `ActiveSupport::Duration` value. To minimize any sort of ambiguity between duration options, this change also documents `race_condition_ttl` accepting `ActiveSupport::Duration`.
* Merge pull request #24577 from mechanicles/fix-fetch-cache-missJeremy Daer2016-04-181-2/+11
|\ | | | | | | Fix forced cache miss for fetch when called without a block.
| * Fix forced cache miss for fetch.Santosh Wadghule2016-04-181-2/+10
| | | | | | | | | | | | - Raised an argument error if no block is passed to #fetch with 'force: true' option is set. - Added tests for the same.
* | Merge pull request #24587 from mechanicles/doc-consistencyXavier Noria2016-04-181-19/+19
|\ \ | |/ |/| Document consistency [ci skip]
| * Document consistency [ci skip]Santosh Wadghule2016-04-171-19/+19
| |
* | Stop passing unused payloads to instrumentation block in cacheVipul A M2016-04-171-2/+2
|/