แคชแบบสอบถามฐานข้อมูลทั้งหมดใน Rails 2.3

ฉันจะแคชคำถามทั้งหมดของฉันได้อย่างไร

คำขอแรก:

@user = User.all

คำขอที่สอง

@user = User.all # Cached

มีปลั๊กอินที่มีประโยชน์ในการทำเช่นนี้หรือไม่?

ฉันอยู่ในโหมดการผลิต ดูเหมือนว่าฉันจะไม่เห็นวลีที่แคชไว้เพื่อยืนยันว่าแอป Rails ของฉันกำลังแคชอยู่


person fujisan    schedule 19.09.2012    source แหล่งที่มา


คำตอบ (1)


ใน config/environments/production.rb ของคุณ

config.action_controller.perform_caching = true

การแคชถูกปิดใช้งานโดยค่าเริ่มต้นสำหรับการพัฒนาและการทดสอบ และเปิดใช้งานสำหรับการผลิต

การแคชแบบสอบถามเป็นคุณลักษณะของ Rails ที่จะแคชชุดผลลัพธ์ที่ส่งคืนโดยแต่ละแบบสอบถาม ดังนั้นหาก Rails พบแบบสอบถามเดียวกันอีกครั้งสำหรับคำขอนั้น ก็จะใช้ชุดผลลัพธ์ที่แคชไว้แทนที่จะเรียกใช้แบบสอบถามกับฐานข้อมูลอีกครั้ง

ตัวอย่างเช่น:

 class UsersController < ActionController

 def index
   # Run a find query
   @users = User.all

   ...

   # Run the same query again
  @users = User.all

   end

 end

ครั้งที่สองที่เรียกใช้แบบสอบถามเดียวกันกับฐานข้อมูล จะไม่เข้าถึงฐานข้อมูลจริงๆ ครั้งแรกที่ผลลัพธ์ถูกส่งกลับจากการสืบค้น ระบบจะจัดเก็บไว้ในแคชการสืบค้น (ในหน่วยความจำ) และครั้งที่สองจะถูกดึงออกจากหน่วยความจำ

ตรวจสอบได้ที่คอนโซลของคุณ

โหลดผู้ใช้ (?ms) SELECT User.* จาก User

เสร็จสิ้น 200 OK ใน ?ms (Views: ?ms | ActiveRecord: ?ms)

คุณสามารถเปรียบเทียบกับการโหลดครั้งแรกและการโหลดครั้งที่สองได้

คุณสามารถใช้ Dalli gem จาก https://github.com/mperham/dalli เพื่อจัดเก็บแคชของคุณไว้ที่ memcached เซิร์ฟเวอร์

person Claud Kho    schedule 19.09.2012