class FeatureFlags
def enabled?(name, member: nil)
key = "ff:#{name}:member:#{member&.id || 'anon'}"
Rails.cache.fetch(key, expires_in: 30.seconds) do
flag = FeatureFlag.find_by!(name: name)
flag.enabled_for?(member)
end
rescue Redis::BaseError
flag = FeatureFlag.find_by!(name: name)
flag.enabled_for?(member)
end
end
A robust feature flag read path should be fast, but also resilient to cache outages. Cache the computed result briefly and fall back to DB if needed; keep the interface dead simple.