Kredis (Keyed Redis) เป็นส่วนเสริมล่าสุดของชุดเครื่องมือของผู้พัฒนา Rails มุ่งมั่นที่จะลดความซับซ้อนในการจัดเก็บและการเข้าถึงข้อมูลที่มีโครงสร้างบน Redis
ในส่วนแรกของซีรีส์สองตอนนี้ เราจะเริ่มต้นด้วยการเข้าไปดูว่า Kredis ทำงานอย่างไร จากนั้นเราจะเรียกใช้กรณีการใช้งานตัวอย่างสำหรับการจัดเก็บสถานะ UI ชั่วคราวโดยใช้คีย์ Redis ที่ออกแบบเป็นพิเศษ
มาเริ่มกันเลย!
บทนำเกี่ยวกับ Kredis สำหรับ Rails
Kredis คือ Railtie ที่ให้กระดาษห่อที่สะดวกเพื่อปรับปรุงการใช้งานในสามวิธี:
- API รูปแบบ Ruby :ตัวอย่างเช่น ประเภทคอลเลกชัน เช่น
00หรือ19รหัส> จำลองประเภท Ruby ดั้งเดิม (และ API ที่เกี่ยวข้อง) ให้มากที่สุด - การพิมพ์ :สะดวกเป็นพิเศษสำหรับคอลเลกชัน Kredis สามารถรองรับการพิมพ์องค์ประกอบจาก/ไปยังประเภทข้อมูลมาตรฐาน (เช่น
28,32รหัส> ). - ActiveRecord DSL :อาจเป็นทรัพย์สินที่ใหญ่ที่สุดของไลบรารี ซึ่งช่วยให้คุณเชื่อมต่อโครงสร้างข้อมูล Redis ใดๆ กับ อินสแตนซ์โมเดลเฉพาะ ได้อย่างง่ายดาย .
นี่คือตัวอย่างจาก README:
ประโยชน์หลักของ Kredis คือความสะดวกในการจัดเก็บข้อมูลชั่วคราวที่เกี่ยวข้องกับบันทึกบางอย่าง แต่ ไม่ขึ้นกับเซสชัน . โดยทั่วไป เมื่อคุณต้องการคงข้อมูลไว้ใน Rails คุณจะมีตัวเลือก 2-3 ตัวเลือก ซึ่งตัวเลือกที่พบบ่อยที่สุด 2 รายการคือ:
- แอคทีฟเรคคอร์ด :ในกรณีส่วนใหญ่ จะต้องเพิ่มคอลัมน์หรือแพตช์โมเดลข้อมูลของคุณ จำเป็นต้องมีการย้ายข้อมูล รวมถึงการทดแทนบันทึกเก่าที่เป็นทางเลือก
- เซสชัน :ที่เก็บคีย์/ค่าเริ่มต้นของแอป Rails ทุกแอป และไม่จำเป็นต้องตั้งค่าหรือตั้งค่าเพียงเล็กน้อย ข้อเสียคือข้อมูลที่เก็บไว้ในนั้นไม่สามารถผ่านรอบการเข้าสู่ระบบ/ออกจากระบบได้
เครดิสนำทางเลือกที่สามมาไว้บนโต๊ะ จำเป็นต้องมีการตั้งค่าเพียงเล็กน้อย นอกเหนือจากการเรียกใช้ DSL ในโมเดล แต่เว้นแต่อินสแตนซ์ Redis ของคุณจะหยุดทำงาน ข้อมูลของคุณจะถูกจัดเก็บไว้ในเซสชันต่างๆ และแม้แต่อุปกรณ์ต่างๆ กรณีการใช้งานที่ดีสำหรับ Kredis ก็คือข้อมูลที่ไม่สำคัญที่คุณต้องการแชร์ข้ามขอบเขตอุปกรณ์ เช่น ในเว็บแอปและแอปมือถือที่แสดงร่วมกัน
กรณีศึกษา:คงอยู่และกู้คืนสถานะ UI ที่ยุบ/ขยายโดยใช้ Kredis
ตัวอย่างการใช้งานที่ดีสำหรับ Kredis โดยทั่วไปคือเมื่อคงสถานะ UI ไว้ เช่น:
- สถานะเปิด/ปิดแถบด้านข้าง
- สถานะเปิด/ปิดมุมมองแบบต้นไม้
- สถานะยุบ/ขยายของหีบเพลง
- รูปแบบแดชบอร์ดที่กำหนดเอง
- ตารางข้อมูลที่จะแสดงมีกี่บรรทัด
ตัวอย่าง เราจะดูวิธีจัดการสถานะการยุบ/ขยายของ 41 องค์ประกอบ.
มาเริ่มกันด้วยแอป Rails ใหม่ เพิ่ม 55 ไปยังบันเดิล และรันโปรแกรมติดตั้ง:
หมายเหตุ: สิ่งนี้จะสร้างไฟล์การกำหนดค่า Redis ใน 60 .
สำหรับส่วนที่เหลือของบทความนี้ ฉันจะถือว่าคุณมีอินสแตนซ์ Redis ที่ทำงานอยู่ในเครื่อง บน macOS ที่มี Homebrew การดำเนินการนี้ทำได้ง่ายพอๆ กับการรัน:
โปรดอ่านคู่มือ "เริ่มต้นใช้งาน" อย่างเป็นทางการเพื่อดูข้อมูลเกี่ยวกับวิธีการติดตั้ง Redis บนระบบปฏิบัติการของคุณ
การตรวจสอบสิทธิ์ผู้ใช้
เราจะใช้ 74 โมเดลเป็นเอนทิตีในการจัดเก็บข้อมูลสถานะ UI เพื่อหลีกเลี่ยงการปั่นจักรยานที่นี่ ให้ใช้สิ่งที่ Devise มอบให้ทันที:
จากนั้นเราสร้างผู้ใช้ตัวอย่างในคอนโซล Rails:
แอปตัวอย่างของเรา:ร้านค้าออนไลน์
เพื่อแสดงให้เห็นว่า Kredis สามารถช่วยรักษาสถานะของโครงสร้างต้นไม้ที่ซับซ้อนได้อย่างไร สมมติว่าเรากำลังเปิดห้างสรรพสินค้าออนไลน์ ด้วยเหตุนี้ เราจะนั่งร้าน 85 และ 95รหัส> โมเดล เรารวมการรวมด้วยตนเองจากแผนกหนึ่งไปอีกแผนกหนึ่ง เพื่อสร้างโครงสร้างที่ซ้อนกันสองระดับ:
แน่นอนว่าเราต้องอนุญาตให้พาเรนต์ที่เป็นโมฆะเพื่ออนุญาตรากโครงสร้างต้นไม้ของเรา:
107 ของเรา และ 118รหัส> โมเดลถูกกำหนดไว้ดังนี้:
สุดท้ายนี้ เราใช้ faker เพื่อสร้างข้อมูลเริ่มต้น:
นั่งร้านหน้าร้าน
เราจะสร้าง 120 แบบง่ายๆ ที่จะทำหน้าที่เป็นหน้าร้านของร้านเรา
เราดำเนินการรวมตนเองกับลูกหลานของแผนกเพื่อดึงเฉพาะแผนกที่มีแผนกย่อยจริงๆ (หรืออีกนัยหนึ่งคือเป็นรากฐานของแผนภูมิต้นไม้ของเรา):
ในมุมมองดัชนี เราตั้งค่ามุมมองแบบต้นไม้แบบซ้อนโดยใช้ 135 สองระดับ องค์ประกอบสำหรับแผนกของเรา:
ตอนนี้เรามีมุมมองแบบต้นไม้ของแผนกต่างๆ ที่มีชื่อผลิตภัณฑ์โง่ๆ โดยเจตนา ซึ่งเราสามารถสำรวจได้โดยการเปิดและปิด:

เราต้องการคงสถานะการเปิดเผยข้อมูลของแต่ละหมวดหมู่ต่อไป ซึ่งเราจะดำเนินการต่อไป
สถานะ UI ของหมวดหมู่ที่มีอยู่ใน Kredis
นี่คือสิ่งที่เรากำลังจะทำ ทีละขั้นตอน:
-
เพิ่ม
145เรียกว่า157ไปที่169โมเดล เหตุผลที่เราใช้ชุดที่นี่คือไม่อนุญาตให้ทำซ้ำ ดังนั้นเราจึงสามารถเพิ่มและลบแผนกของเราได้อย่างปลอดภัย -
สร้าง
178ที่จะได้รับพารามิเตอร์ต่อไปนี้:183รหัส>196รหัส> สถานะของแผนกนั้น
จากนั้นจะเพิ่มหรือลบแผนกนี้ไปที่
200สำหรับผู้ใช้ที่เข้าสู่ระบบอยู่ในปัจจุบัน -
สร้างตัวควบคุมการกระตุ้น ซึ่งจะรับฟังเหตุการณ์สลับในองค์ประกอบรายละเอียดและส่งผ่านเพย์โหลดที่เกี่ยวข้อง
เข้าเรื่องเลย!
การเพิ่มโครงสร้างข้อมูล Kredis ดังกล่าวใน 214 model นั้นง่ายเหมือนกับการเรียก 227 และส่งผ่านตัวระบุ:
ต่อไป เราจะสร้าง 236 เพื่อรับการอัพเดตสถานะ UI โปรดทราบว่าเราต้องกำหนดค่าเส้นทางที่สร้างขึ้นให้เป็น 244 จุดสิ้นสุด:
การเผชิญหน้าครั้งแรกกับ API ของ Kredis อยู่ในคอนโทรลเลอร์ เราจะเห็นว่ามันพยายามที่จะสอดคล้องกับความคาดหวังของนักพัฒนา Ruby อย่างใกล้ชิดที่สุดเท่าที่จะเป็นไปได้ ดังนั้นคุณจึงสามารถเพิ่มลงในชุดได้โดยใช้ 250 และลบโดยใช้ 262 .
สิ่งที่เกิดขึ้นที่นี่คือเราสลับการแสดง 272 ที่เฉพาะเจาะจง ในชุดตาม 282 พารามิเตอร์ถูกส่งมอบจากลูกค้า เพื่อให้ภาพสมบูรณ์ เราต้องเขียนโค้ดฝั่งไคลเอ็นต์เพื่อส่งการเปลี่ยนแปลงสถานะ UI เหล่านี้
เราจะใช้ 293 เพื่อดำเนินการ ดังนั้นเราจึงต้องปักหมุด:
ในตัวควบคุม Stimulus ใหม่ที่เราจะแนบไปกับ 300 เฉพาะ องค์ประกอบ เราจะผนวก ID แผนกและ 319 ระบุเป็น 320 คัดค้าน และส่ง:
เราแก้ไขโค้ดการดูของเราตามที่เสนอ และรับฟัง 336 เหตุการณ์ของแต่ละ 348 องค์ประกอบที่จะทริกเกอร์การอัปเดตสถานะ UI:
เติมน้ำ DOM ด้วยตนเอง
ส่วนประกอบเดียวที่ขาดหายไปในการเติมเต็มคือการให้ความชุ่มชื้น DOM ของเราไปสู่สถานะที่ต้องการเมื่อผู้ใช้รีเฟรชเพจ เราดำเนินการด้วยตนเองโดยเพิ่ม 358 แอตทริบิวต์เป็น 361 โหนด (หากมี ID แผนกอยู่ในชุด Kredis):
สุดท้ายนี่คือผลลัพธ์ โปรดทราบว่าสถานะเปิด/ปิดของโหนดต้นไม้แต่ละโหนดจะถูกรักษาไว้มากกว่า 2 ระดับ:
ถัดไป:คอนเทนเนอร์ภายในของผู้ใช้ทั่วไปสำหรับสถานะ UI
ในส่วนแรกของซีรีส์สองตอนนี้ เราได้แนะนำ Kredis และสำรวจวิธีการคงอยู่และกู้คืนสถานะ UI ที่ยุบ/ขยายด้วย Kredis
เราใช้ตัวอย่างของห้างสรรพสินค้าออนไลน์เพื่อเน้นย้ำว่า Kredis สามารถรักษาสถานะของโครงสร้างต้นไม้ที่ซับซ้อนได้อย่างไร ก่อนที่จะเติมน้ำให้กับ DOM ด้วยตนเองในที่สุด
อย่างไรก็ตาม นี่หมายความว่าเราต้องประดิษฐ์คีย์ Kredis จำนวนมาก คราวหน้า เราจะมาเจาะลึกถึงวิธีที่เราจะจัดการเรื่องนี้ด้วยคอนเทนเนอร์ภายในเครื่องของผู้ใช้ทั่วไปสำหรับสถานะ UI
ถึงเวลานั้น ขอให้สนุกกับการเขียนโค้ด!
ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ป>