2013-07-03 4 views
0

В приложении rails результаты уникальных операторов SQL в рамках одного HTTP-запроса кэшируются. Если один и тот же оператор выполняется дважды в рамках одного запроса, второй запрос кэшируется. Это хорошо приводит в следующем, когда пользователь 18 доступен дважды в одном запросе HTTP:Можно ли кэшировать SQL-запросы/запросы ActiveRecord в отложенной задаче?

User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 18 LIMIT 1 
CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 18 LIMIT 1 

Может ли я сделать то же самое в замедленном задании?

ответ

1

Вы можете выборочно включать кеширование (или выкл.) Для блоков кода. Вы можете сделать это с помощью метода, используемого заданием Delayed.

User.cache do 
    # caching is turned on in this block 
    User.find(18) 
    User.find(18) 
end 

User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 18]] 
CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 18]] 

Если вы хотите отключить кэширование для блока:

User.uncached do 
    # caching is off for this block 
    User.find(18) 
    User.find(18) 
end 

User Load (1.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]] 
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]] 
Смежные вопросы