Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

การเรียนรู้ Solid Cache ใน Rails:เพิ่มประสิทธิภาพด้วยกลยุทธ์การแคชขั้นสูง

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

การเรียนรู้ Solid Cache ใน Rails:เพิ่มประสิทธิภาพด้วยกลยุทธ์การแคชขั้นสูง

แนวคิดในการใช้แคชฐานข้อมูลอาจฟังดูไม่มีประสิทธิภาพ ถึงกระนั้น การใช้แคชที่สำรองฐานข้อมูลที่ช้ากว่า เช่น Solid Cache ใน Rails ก็สามารถทำให้แอปพลิเคชันเร่งความเร็วได้อย่างรวดเร็ว เนื่องจากพื้นที่จัดเก็บที่ถูกกว่าช่วยให้เราแคชสิ่งต่าง ๆ ได้มากขึ้นในระยะเวลานานขึ้น ใน Rails 7.1 มีการเปิดตัว Solid Cache ทำให้แคชแอปพลิเคชันที่สำรองฐานข้อมูลเป็นตัวเลือกที่สะดวกสำหรับแอปพลิเคชัน Rails!

แคช Rails ทำงานอย่างไร

การแคชใน Ruby on Rails เป็นส่วนสำคัญในการเพิ่มประสิทธิภาพการทำงานของแอปพลิเคชัน นักพัฒนาแคชสามารถใช้เพื่อปรับปรุงประสิทธิภาพได้หลายประเภท ได้แก่ การแคชเพจ การแคชการดำเนินการ การแคชส่วน การแคชระดับต่ำ การแคช SQL และอื่นๆ ในบทความนี้ เราจะพูดถึงการแคชระดับต่ำเป็นส่วนใหญ่ เนื่องจากตรงไปตรงมาและเข้ากันได้กับ cache_store ที่กำหนดค่าได้ .

ActiveSupport ซึ่งเป็นชิ้นส่วนขนาดใหญ่ของเฟรมเวิร์ก Rails ช่วยให้เราสามารถโต้ตอบและกำหนดค่าแคชผ่านทาง cache_store . ใน config/environments/ มีไฟล์ที่มีชื่อสภาพแวดล้อมแต่ละชื่อในการกำหนดค่าต่างๆ รวมถึงตัวเลือก cache_store

การตั้งค่า cache_store

Redis เป็นร้านแคชที่ได้รับความนิยมอย่างไม่น่าเชื่อและได้รับการยอมรับอย่างกว้างขวางในอุตสาหกรรม หากแอปพลิเคชันใช้ Redis สำหรับการแคชในการใช้งานจริง คุณจะเห็นบรรทัด Ruby ต่อไปนี้ใน config/environments/production.rb :

config.cache_store = :redis_cache_store

Redis ถูกใช้เนื่องจากเป็นแคชหน่วยความจำ และหน่วยความจำมีเวลาในการเข้าถึงการอ่านที่รวดเร็วกว่าการเข้าถึงดิสก์หรือการสืบค้นฐานข้อมูลมาก

การแคชแบบสอบถามฐานข้อมูลใน Rails

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

Rails.cache.fetch("courses", expires_in: 12.hours) do
 Courses.all
end

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

Rails Solid Cache คืออะไร

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

Rails 7.1 มาพร้อมกับ Solid Cache ซึ่งเป็นตัวเลือกสำหรับ ActiveRecord::Cache::Store ที่ใช้ฐานข้อมูล SQL สำหรับที่เก็บแคช การอ่านแต่ละครั้งจากแคชจะช้าลง แต่ด้วยความก้าวหน้าทางเทคโนโลยีและแคชหน่วยความจำในตัวในฐานข้อมูลจำนวนมาก ความแตกต่างยังคงเป็นประโยชน์

การใช้ฐานข้อมูล SQL เป็นที่เก็บแคชช่วยให้คุณมีพื้นที่จัดเก็บข้อมูลเพิ่มขึ้นหลายเท่าด้วยต้นทุนที่น้อยลง ทำให้แอปพลิเคชันของคุณสามารถแคชข้อมูลได้มากขึ้นในระยะเวลานานขึ้น ทีมงาน Basecamp เขียนบทความเกี่ยวกับวิธีที่สิ่งนี้เร่งการสมัคร ซึ่งอาจดูเหมือนขัดกับสัญชาตญาณ

เมื่อใดที่คุณควรใช้ Solid Cache

แม้ว่าแคชหน่วยความจำอย่าง Redis จะให้การอ่านจากแคชที่รวดเร็วกว่า แต่ Solid Cache ก็เป็นทางเลือกที่ดีสำหรับตัวเลือกเหล่านั้นในหลาย ๆ สถานการณ์

หากแอปพลิเคชันของคุณต้องการแคชข้อมูลจำนวนมาก การจัดเก็บข้อมูลไว้ในหน่วยความจำอาจมีราคาแพงมาก Solid Cache ช่วยให้มีขนาดแคชที่ใหญ่กว่ามากโดยมีค่าใช้จ่ายเพียงเล็กน้อย

หากแอปพลิเคชันของคุณไม่มีความไวสูงต่อเวลาเรียกค้นแคชที่เพิ่มเข้ามาสองสามมิลลิวินาที Solid Cache จะให้ความสมดุลที่ยอดเยี่ยมระหว่างประสิทธิภาพและต้นทุน หากคุณสามารถลดเวลาแฝงที่อาจเกิดขึ้นได้ Solid Cache ก็เป็นทางเลือกที่ดี

ในการตั้งค่าแบบแยกกันที่การจัดการอินสแตนซ์ Redis แยกต่างหากนั้นทำไม่ได้ Solid Cache จะทำให้การปรับใช้ง่ายขึ้นโดยอนุญาตให้ฐานข้อมูลที่มีอยู่ของคุณจัดการแคชโดยไม่จำเป็นต้องรองรับ Redis

การติดตั้งโซลิดแคช

Solid Cache Readme มีคำแนะนำที่เป็นประโยชน์ในการแนะนำลงในแอปพลิเคชัน Rails ขั้นแรก เพิ่มอัญมณีลงใน Gemfile ของคุณ:

gem "solid_cache"

ถัดไป ติดตั้งด้วย Bundler:

bundle install

ถัดไป เพิ่มการย้ายเพื่อให้ฐานข้อมูลของคุณทำงานกับ Solid Cache เรียกใช้สิ่งต่อไปนี้:

bin/rails solid_cache:install:migrations

สุดท้าย ให้รันการโยกย้ายที่สร้างขึ้น:

bin/rails db:migrate

การใช้ Solid Cache ในแอป Rails

การสลับ Solid Cache สำหรับแคชที่มีอยู่มักจะตรงไปตรงมา ในการกำหนดค่าสภาพแวดล้อมของคุณ เช่น config/environments/production.rb ให้เปลี่ยน cache_store การตั้งค่าดังต่อไปนี้:

config.cache_store = :solid_cache_store

นี่คือทั้งหมดที่จำเป็นในการเริ่มใช้ Solid Cache เป็นที่จัดเก็บแคชของคุณ! รองรับ ActiveSupport::Cache::Store อื่นๆ ทั้งหมด ตัวเลือกการกำหนดค่า รวมถึงตัวเลือกเพิ่มเติมเพื่อรองรับการแบ่งส่วนฐานข้อมูลหรือความต้องการเฉพาะอื่นๆ

คุณควรทราบว่าการดำเนินการนี้จะเปลี่ยนเฉพาะที่เก็บแคชในการใช้งานจริง ดังนั้นหากคุณจะทดสอบในสภาพแวดล้อมอื่น คุณจะต้องเปลี่ยนค่าที่นั่นเช่นกัน

คุณจะเปลี่ยนไปใช้ Solid Cache ใน Rails หรือไม่

การเปิดตัว Solid Cache ใน Rails 7.1 ถือเป็นการพัฒนาที่สำคัญในโลกของกลยุทธ์การแคชของ Rails โซลูชันนี้นำเสนอมุมมองใหม่เกี่ยวกับการเพิ่มประสิทธิภาพแอปพลิเคชัน โดยท้าทายการตั้งค่าแคชตามหน่วยความจำแบบดั้งเดิม เช่น Redis

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

อย่างไรก็ตาม การตัดสินใจเปลี่ยนจะขึ้นอยู่กับความต้องการเฉพาะของแอปพลิเคชันของคุณ หากแอปพลิเคชันของคุณได้รับประโยชน์อย่างมากจากการแคชความเร็วสูง และคุณมีโครงสร้างพื้นฐานที่รองรับ Redis คุณอาจไม่จำเป็นต้องใช้ Solid Cache อย่างไรก็ตาม หากคุณกำลังมองหาวิธีที่คุ้มค่าในการแคชข้อมูลจำนวนมหาศาลโดยไม่ต้องเพิ่มบริการอื่นลงในสแต็กของคุณ Solid Cache อาจคุ้มค่าที่จะลองสำรวจ แม้ว่าคุณเพียงต้องการหลีกเลี่ยงการรองรับ Redis แต่ Solid Cache ก็อาจจะดีเกินพอสำหรับแอปของคุณ

หากคุณชอบบทความนี้ สมัครรับจดหมายข่าว Honeybadger เพื่อรับบทความ Ruby and Rails เช่นนี้ในกล่องจดหมายของคุณเพิ่มเติม