0

Rails アプリケーションでは、単一の HTTP リクエスト内の一意の SQL ステートメントの結果がキャッシュされます。1 つの要求内で同じステートメントが 2 回実行されると、2 番目のクエリがキャッシュされます。1 回の HTTP リクエストで User 18 が 2 回アクセスされると、次のようになります。

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

遅延ジョブ内で同じことを行うことはできますか?

4

1 に答える 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]]
于 2013-07-03T21:12:07.317 に答える