Unuse ActiveRecord::Base#cache_key (#8185)
* Unuse ActiveRecord::Base#cache_key * Enable cache_versioning * Call cache_collection
This commit is contained in:
		
							parent
							
								
									0d1d9b9a33
								
							
						
					
					
						commit
						9e75aa30cd
					
				
					 6 changed files with 9 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -42,7 +42,7 @@ class AccountsController < ApplicationController
 | 
			
		|||
      format.json do
 | 
			
		||||
        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)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,8 +17,7 @@ class Api::V1::StatusesController < Api::BaseController
 | 
			
		|||
  CONTEXT_LIMIT = 4_096
 | 
			
		||||
 | 
			
		||||
  def show
 | 
			
		||||
    cached  = Rails.cache.read(@status.cache_key)
 | 
			
		||||
    @status = cached unless cached.nil?
 | 
			
		||||
    @status = cache_collection([@status], Status).first
 | 
			
		||||
    render json: @status, serializer: REST::StatusSerializer
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -103,12 +103,8 @@ class ApplicationController < ActionController::Base
 | 
			
		|||
    return raw unless klass.respond_to?(:with_includes)
 | 
			
		||||
 | 
			
		||||
    raw                    = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation)
 | 
			
		||||
    uncached_ids           = []
 | 
			
		||||
    cached_keys_with_value = Rails.cache.read_multi(*raw.map(&:cache_key))
 | 
			
		||||
 | 
			
		||||
    raw.each do |item|
 | 
			
		||||
      uncached_ids << item.id unless cached_keys_with_value.key?(item.cache_key)
 | 
			
		||||
    end
 | 
			
		||||
    cached_keys_with_value = Rails.cache.read_multi(*raw).transform_keys(&:id)
 | 
			
		||||
    uncached_ids           = raw.map(&:id) - cached_keys_with_value.keys
 | 
			
		||||
 | 
			
		||||
    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.each_value do |item|
 | 
			
		||||
        Rails.cache.write(item.cache_key, item)
 | 
			
		||||
        Rails.cache.write(item, item)
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
  def respond_with_error(code)
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +131,6 @@ class ApplicationController < ActionController::Base
 | 
			
		|||
 | 
			
		||||
  def render_cached_json(cache_key, **options)
 | 
			
		||||
    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
 | 
			
		||||
    content_type           = options.delete(:content_type) || 'application/json'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ class EmojisController < ApplicationController
 | 
			
		|||
      format.json do
 | 
			
		||||
        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)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ class StatusesController < ApplicationController
 | 
			
		|||
      format.json do
 | 
			
		||||
        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)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ class StatusesController < ApplicationController
 | 
			
		|||
  def activity
 | 
			
		||||
    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)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,8 +24,6 @@
 | 
			
		|||
#
 | 
			
		||||
 | 
			
		||||
class Status < ApplicationRecord
 | 
			
		||||
  self.cache_versioning = false
 | 
			
		||||
 | 
			
		||||
  include Paginable
 | 
			
		||||
  include Streamable
 | 
			
		||||
  include Cacheable
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue