Unuse ActiveRecord::Base#cache_key (#8185)
* Unuse ActiveRecord::Base#cache_key * Enable cache_versioning * Call cache_collectiongh/stable
parent
0d1d9b9a33
commit
9e75aa30cd
|
@ -42,7 +42,7 @@ class AccountsController < ApplicationController
|
||||||
format.json do
|
format.json do
|
||||||
skip_session!
|
skip_session!
|
||||||
|
|
||||||
render_cached_json(['activitypub', 'actor', @account.cache_key], content_type: 'application/activity+json') do
|
render_cached_json(['activitypub', 'actor', @account], content_type: 'application/activity+json') do
|
||||||
ActiveModelSerializers::SerializableResource.new(@account, serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter)
|
ActiveModelSerializers::SerializableResource.new(@account, serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,8 +17,7 @@ class Api::V1::StatusesController < Api::BaseController
|
||||||
CONTEXT_LIMIT = 4_096
|
CONTEXT_LIMIT = 4_096
|
||||||
|
|
||||||
def show
|
def show
|
||||||
cached = Rails.cache.read(@status.cache_key)
|
@status = cache_collection([@status], Status).first
|
||||||
@status = cached unless cached.nil?
|
|
||||||
render json: @status, serializer: REST::StatusSerializer
|
render json: @status, serializer: REST::StatusSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -103,12 +103,8 @@ class ApplicationController < ActionController::Base
|
||||||
return raw unless klass.respond_to?(:with_includes)
|
return raw unless klass.respond_to?(:with_includes)
|
||||||
|
|
||||||
raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation)
|
raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation)
|
||||||
uncached_ids = []
|
cached_keys_with_value = Rails.cache.read_multi(*raw).transform_keys(&:id)
|
||||||
cached_keys_with_value = Rails.cache.read_multi(*raw.map(&:cache_key))
|
uncached_ids = raw.map(&:id) - cached_keys_with_value.keys
|
||||||
|
|
||||||
raw.each do |item|
|
|
||||||
uncached_ids << item.id unless cached_keys_with_value.key?(item.cache_key)
|
|
||||||
end
|
|
||||||
|
|
||||||
klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!)
|
klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!)
|
||||||
|
|
||||||
|
@ -116,11 +112,11 @@ class ApplicationController < ActionController::Base
|
||||||
uncached = klass.where(id: uncached_ids).with_includes.map { |item| [item.id, item] }.to_h
|
uncached = klass.where(id: uncached_ids).with_includes.map { |item| [item.id, item] }.to_h
|
||||||
|
|
||||||
uncached.each_value do |item|
|
uncached.each_value do |item|
|
||||||
Rails.cache.write(item.cache_key, item)
|
Rails.cache.write(item, item)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
raw.map { |item| cached_keys_with_value[item.cache_key] || uncached[item.id] }.compact
|
raw.map { |item| cached_keys_with_value[item.id] || uncached[item.id] }.compact
|
||||||
end
|
end
|
||||||
|
|
||||||
def respond_with_error(code)
|
def respond_with_error(code)
|
||||||
|
@ -135,7 +131,6 @@ class ApplicationController < ActionController::Base
|
||||||
|
|
||||||
def render_cached_json(cache_key, **options)
|
def render_cached_json(cache_key, **options)
|
||||||
options[:expires_in] ||= 3.minutes
|
options[:expires_in] ||= 3.minutes
|
||||||
cache_key = cache_key.join(':') if cache_key.is_a?(Enumerable)
|
|
||||||
cache_public = options.key?(:public) ? options.delete(:public) : true
|
cache_public = options.key?(:public) ? options.delete(:public) : true
|
||||||
content_type = options.delete(:content_type) || 'application/json'
|
content_type = options.delete(:content_type) || 'application/json'
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ class EmojisController < ApplicationController
|
||||||
format.json do
|
format.json do
|
||||||
skip_session!
|
skip_session!
|
||||||
|
|
||||||
render_cached_json(['activitypub', 'emoji', @emoji.cache_key], content_type: 'application/activity+json') do
|
render_cached_json(['activitypub', 'emoji', @emoji], content_type: 'application/activity+json') do
|
||||||
ActiveModelSerializers::SerializableResource.new(@emoji, serializer: ActivityPub::EmojiSerializer, adapter: ActivityPub::Adapter)
|
ActiveModelSerializers::SerializableResource.new(@emoji, serializer: ActivityPub::EmojiSerializer, adapter: ActivityPub::Adapter)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,7 +33,7 @@ class StatusesController < ApplicationController
|
||||||
format.json do
|
format.json do
|
||||||
skip_session! unless @stream_entry.hidden?
|
skip_session! unless @stream_entry.hidden?
|
||||||
|
|
||||||
render_cached_json(['activitypub', 'note', @status.cache_key], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do
|
render_cached_json(['activitypub', 'note', @status], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do
|
||||||
ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::NoteSerializer, adapter: ActivityPub::Adapter)
|
ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::NoteSerializer, adapter: ActivityPub::Adapter)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -43,7 +43,7 @@ class StatusesController < ApplicationController
|
||||||
def activity
|
def activity
|
||||||
skip_session!
|
skip_session!
|
||||||
|
|
||||||
render_cached_json(['activitypub', 'activity', @status.cache_key], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do
|
render_cached_json(['activitypub', 'activity', @status], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do
|
||||||
ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::ActivitySerializer, adapter: ActivityPub::Adapter)
|
ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::ActivitySerializer, adapter: ActivityPub::Adapter)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,8 +24,6 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
class Status < ApplicationRecord
|
class Status < ApplicationRecord
|
||||||
self.cache_versioning = false
|
|
||||||
|
|
||||||
include Paginable
|
include Paginable
|
||||||
include Streamable
|
include Streamable
|
||||||
include Cacheable
|
include Cacheable
|
||||||
|
|
Reference in New Issue