2016-11-18 50 views
0

今天我試圖使用ActiveModelSerializers設置緩存。我遇到了很多問題(我的連接保持超時)。所以我試圖恢復所有的更改,包括刪除我正在處理的分支。如何退出ActiveModelSerializers中的緩存?

但是,自從我嘗試設置緩存以來,我一直在使用的模型展現出奇怪的行爲。看起來它仍在加載緩存元素。嘗試訪問該模型的端點時,這會造成巨大的性能下降。

Started GET "/api/v1/entities" for ::1 at 2016-11-17 16:50:44 -0700 
    ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations".* FROM "schema_migrations" 
Processing by Api::V1::EntitiesController#index as JSON 
    Entity Load (0.4ms) SELECT "entities".* FROM "entities" ORDER BY "entities"."name" ASC 
    Group Load (0.3ms) SELECT "groups".* FROM "groups" WHERE "groups"."id" IN (2, 3, 1) ORDER BY "groups"."name" ASC 
    Platform Load (0.4ms) SELECT "platforms".* FROM "platforms" WHERE "platforms"."id" IN (3, 8) ORDER BY "platforms"."name" ASC 
    HardwareType Load (19.3ms) SELECT "hardware_types".* FROM "hardware_types" WHERE "hardware_types"."id" IN (1, 3, 19, 8) 
    EntityType Load (0.2ms) SELECT "entity_types".* FROM "entity_types" WHERE "entity_types"."id" IN (1) 
    EntityOperationalState Load (0.4ms) SELECT "entity_operational_states".* FROM "entity_operational_states" WHERE "entity_operational_states"."entity_id" IN (1, 2, 3, 4) 
    OperationalState Load (0.2ms) SELECT "operational_states".* FROM "operational_states" WHERE "operational_states"."id" IN (1) ORDER BY "operational_states"."name" ASC 
    EntityLifecycleState Load (0.4ms) SELECT "entity_lifecycle_states".* FROM "entity_lifecycle_states" WHERE "entity_lifecycle_states"."entity_id" IN (1, 2, 3, 4) 
    LifecycleState Load (0.3ms) SELECT "lifecycle_states".* FROM "lifecycle_states" WHERE "lifecycle_states"."id" IN (2) ORDER BY "lifecycle_states"."name" ASC 
    IpAddress Load (0.3ms) SELECT "ip_addresses".* FROM "ip_addresses" WHERE "ip_addresses"."entity_id" IN (1, 2, 3, 4) 
    IpType Load (0.2ms) SELECT "ip_types".* FROM "ip_types" WHERE "ip_types"."id" IN (1) 
    IpUse Load (0.4ms) SELECT "ip_uses".* FROM "ip_uses" WHERE "ip_uses"."id" IN (1, 2) 
[active_model_serializers] Entity Load (0.3ms) SELECT "entities".* FROM "entities" WHERE "entities"."id" = ? ORDER BY "entities"."name" ASC LIMIT 1 [["id", 1]] 
[active_model_serializers] CACHE (0.0ms) SELECT "entities".* FROM "entities" WHERE "entities"."id" = ? ORDER BY "entities"."name" ASC LIMIT 1 [["id", 1]] 
[active_model_serializers] Entity Load (0.2ms) SELECT "entities".* FROM "entities" WHERE "entities"."id" = ? ORDER BY "entities"."name" ASC LIMIT 1 [["id", 2]] 
[active_model_serializers] CACHE (0.0ms) SELECT "entities".* FROM "entities" WHERE "entities"."id" = ? ORDER BY "entities"."name" ASC LIMIT 1 [["id", 2]] 
[active_model_serializers] Entity Load (0.2ms) SELECT "entities".* FROM "entities" WHERE "entities"."id" = ? ORDER BY "entities"."name" ASC LIMIT 1 [["id", 3]] 
[active_model_serializers] CACHE (0.0ms) SELECT "entities".* FROM "entities" WHERE "entities"."id" = ? ORDER BY "entities"."name" ASC LIMIT 1 [["id", 3]] 
[active_model_serializers] Rendered ActiveModel::Serializer::CollectionSerializer with ActiveModelSerializers::Adapter::Json (71.13ms) 
Completed 200 OK in 617ms (Views: 474.3ms | ActiveRecord: 27.8ms) 

[active_model_serializers]負荷和高速緩存是新的東西,導致我相信串行仍試圖從緩存中加載。

我的其他模型,我沒有觸及只有一個[active_model_serializers]聲明的負載,這是我預期的行爲。

Started GET "/api/v1/groups" for ::1 at 2016-11-17 16:56:15 -0700 
Processing by Api::V1::GroupsController#index as JSON 
    Group Load (0.2ms) SELECT "groups".* FROM "groups" ORDER BY "groups"."name" ASC 
    Platform Load (0.3ms) SELECT "platforms".* FROM "platforms" WHERE "platforms"."id" IN (8, 3) ORDER BY "platforms"."name" ASC 
    GroupOperationalState Load (0.2ms) SELECT "group_operational_states".* FROM "group_operational_states" WHERE "group_operational_states"."group_id" IN (1, 2, 3) 
    OperationalState Load (0.2ms) SELECT "operational_states".* FROM "operational_states" WHERE "operational_states"."id" IN (1) ORDER BY "operational_states"."name" ASC 
    GroupLifecycleState Load (0.4ms) SELECT "group_lifecycle_states".* FROM "group_lifecycle_states" WHERE "group_lifecycle_states"."group_id" IN (1, 2, 3) 
    LifecycleState Load (0.2ms) SELECT "lifecycle_states".* FROM "lifecycle_states" WHERE "lifecycle_states"."id" IN (2) ORDER BY "lifecycle_states"."name" ASC 
    GroupConfigurationProfile Load (0.3ms) SELECT "group_configuration_profiles".* FROM "group_configuration_profiles" WHERE "group_configuration_profiles"."group_id" IN (1, 2, 3) 
    ConfigurationProfile Load (0.3ms) SELECT "configuration_profiles".* FROM "configuration_profiles" WHERE "configuration_profiles"."id" IN (1, 2, 3) ORDER BY "configuration_profiles"."name" ASC 
[active_model_serializers] Rendered ActiveModel::Serializer::CollectionSerializer with ActiveModelSerializers::Adapter::Json (1.4ms) 
Completed 200 OK in 51ms (Views: 36.3ms | ActiveRecord: 2.1ms) 

Started GET "/api/v1/ip_addresses" for ::1 at 2016-11-17 16:58:34 -0700 
Processing by Api::V1::IpAddressesController#index as JSON 
    IpAddress Load (0.2ms) SELECT "ip_addresses".* FROM "ip_addresses" 
    Entity Load (0.3ms) SELECT "entities".* FROM "entities" WHERE "entities"."id" IN (1, 2, 3) ORDER BY "entities"."name" ASC 
    IpUse Load (0.2ms) SELECT "ip_uses".* FROM "ip_uses" WHERE "ip_uses"."id" IN (1, 2) 
    IpType Load (0.1ms) SELECT "ip_types".* FROM "ip_types" WHERE "ip_types"."id" IN (1) 
[active_model_serializers] Rendered ActiveModel::Serializer::CollectionSerializer with ActiveModelSerializers::Adapter::Json (2.85ms) 
Completed 200 OK in 28ms (Views: 14.8ms | ActiveRecord: 0.9ms) 

正如你所看到的,那些額外的訪問數據庫會減慢我的加載時間。這些模型現在都有大約3個對象,但是當我用更多的記錄進行測試時,這成爲一個巨大的問題。

如何強制ActiveModelSerializer忽略緩存項目?

更好的選擇是弄清楚這些碎片在哪裏被緩存,所以我可以將它們清除。我試過Rails.cache.clear,但是這沒有效果。我也嘗試過,重新啓動計算機,並關閉Redis實例。

回答

0

沒關係。顯然這與我正在做的緩存工作無關。

我對我的has_many關係中的實體名稱有一個循環引用