class Fbe::Middleware::SqliteStore
def write(key, value)
- Note: - Non-GET requests and URLs with query parameters are not cached
Note: - Values larger than 10KB are not cached
Returns:
-
(nil)
-
Parameters:
-
value
(Object
) -- The value to cache (will be JSON encoded) -
key
(String
) -- The cache key to write
def write(key, value) return if value.is_a?(Array) && value.any? do |vv| req = JSON.parse(vv[0]) req['method'] != 'get' end if @cache_min_age && value.is_a?(Array) && value[0].is_a?(Array) && value[0].size > 1 begin resp = JSON.parse(value[0][1]) rescue TypeError, JSON::ParserError => e @loog.info("Failed to parse response to rewrite the cache age: #{e.message}") resp = nil end cache_control = resp.dig('response_headers', 'cache-control') if resp.is_a?(Hash) if cache_control && !cache_control.empty? %w[max-age s-maxage].each do |key| age = cache_control.scan(/#{key}=(\d+)/i).first&.first&.to_i if age age = [age, @cache_min_age].max cache_control = cache_control.sub(/#{key}=(\d+)/, "#{key}=#{age}") end end resp['response_headers']['cache-control'] = cache_control value[0][1] = JSON.dump(resp) end end value = Zlib::Deflate.deflate(JSON.dump(value)) return if value.bytesize > @maxvsize perform do |t| t.execute(<<~SQL, [key, value, Time.now.utc.iso8601]) INSERT INTO cache(key, value, touched_at, created_at) VALUES(?1, ?2, ?3, ?3) ON CONFLICT(key) DO UPDATE SET value = ?2, touched_at = ?3, created_at = ?3 SQL end nil end