Cache Flipper persisted names directly to local memory storage

Now that application settings are no longer dominating network traffic,
we see that the Feature#persisted_names is using a significant amount of
CPU and network bandwidth for Redis. Move this cache into the
thread-local memory storage to reduce Redis overhead.
This commit is contained in:
Stan Hu 2019-07-02 06:58:47 -07:00
parent e07ebe66af
commit 385aa46046
3 changed files with 9 additions and 2 deletions

View File

@ -0,0 +1,5 @@
---
title: Cache Flipper persisted names directly to local memory storage
merge_request: 30265
author:
type: performance

View File

@ -34,7 +34,9 @@ class Feature
begin
# We saw on GitLab.com, this database request was called 2300
# times/s. Let's cache it for a minute to avoid that load.
Rails.cache.fetch('flipper:persisted_names', expires_in: 1.minute) { FlipperFeature.feature_names }
Gitlab::ThreadMemoryCache.cache_backend.fetch('flipper:persisted_names', expires_in: 1.minute) do
FlipperFeature.feature_names
end
end
end

View File

@ -40,7 +40,7 @@ describe Feature do
.once
.and_call_original
expect(Rails.cache)
expect(Gitlab::ThreadMemoryCache.cache_backend)
.to receive(:fetch)
.once
.with('flipper:persisted_names', expires_in: 1.minute)