978647c6cb
Loading `ApplicationSetting` from Redis was responsible for at least 50% of the CPU load of the Redis cluster on GitLab.com. Since these values generally don't change very much, we can load this from the database and cache it in memory, skipping Redis altogther. We use `ActiveSupport::Cache::MemoryStore` as a drop-in replacement for `RedisCacheStore` even though we probably don't need synchronized access within `Thread.current`. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/63977
15 lines
489 B
Ruby
15 lines
489 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
class ThreadMemoryCache
|
|
THREAD_KEY = :thread_memory_cache
|
|
|
|
def self.cache_backend
|
|
# Note ActiveSupport::Cache::MemoryStore is thread-safe. Since
|
|
# each backend is local per thread we probably don't need to worry
|
|
# about synchronizing access, but this is a drop-in replacement
|
|
# for ActiveSupport::Cache::RedisStore.
|
|
Thread.current[THREAD_KEY] ||= ActiveSupport::Cache::MemoryStore.new
|
|
end
|
|
end
|
|
end
|