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

การแคชแบบกระจายหลักใน ASP.NET Core โดยใช้ Redis เพื่อประสิทธิภาพที่รวดเร็วปานสายฟ้า

การแคชแบบกระจายหลักใน ASP.NET Core โดยใช้ Redis เพื่อประสิทธิภาพที่รวดเร็วปานสายฟ้า

บทนำ

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

นี่คือจุดที่การแคชแบบกระจายด้วย Redis ช่วยได้

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

ในคู่มือนี้ คุณจะได้เรียนรู้ทีละขั้นตอนวิธีใช้แคชแบบกระจาย Redis ใน ASP.NET Core ด้วยคำศัพท์ที่ง่ายและใช้งานได้จริง

แคชแบบกระจายคืออะไร

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

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

แต่ในการแคชแบบกระจาย:

  • เซิร์ฟเวอร์ทั้งหมดใช้แคชเดียวกัน

  • ข้อมูลยังคงสอดคล้องกันทั่วทั้งแอปพลิเคชัน

  • ทำงานได้ดีในสภาพแวดล้อมที่ปรับขนาดได้

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

เรดิสคืออะไร?

Redis เป็นที่เก็บข้อมูลในหน่วยความจำที่รวดเร็วมากซึ่งใช้กันอย่างแพร่หลายในการแคช

คิดว่า Redis เป็นพจนานุกรมที่รวดเร็วโดยที่:

  • คุณจัดเก็บข้อมูลโดยใช้คีย์

  • คุณดึงข้อมูลโดยใช้คีย์เดียวกัน

เหตุใดนักพัฒนาจึงชอบ Redis:

  • มันเร็วมากเพราะมันเก็บข้อมูลไว้ในหน่วยความจำ

  • รองรับการจัดเก็บคีย์-ค่าอย่างง่าย

  • ง่ายต่อการรวมเข้ากับ ASP.NET Core

  • ใช้งานได้ดีกับแอปพลิเคชันที่ปรับขนาดได้และบนคลาวด์

ข้อกำหนดเบื้องต้น

ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้พร้อม:

  • ติดตั้ง .NET SDK บนระบบของคุณแล้ว

  • โครงการ ASP.NET Core ที่ใช้งานได้

  • ติดตั้ง Redis ในเครื่องหรือเข้าถึงบริการ Redis บนคลาวด์

  • ความเข้าใจพื้นฐานเกี่ยวกับคอนโทรลเลอร์และบริการใน ASP.NET Core

หากไม่ได้ติดตั้ง Redis ในเครื่อง คุณสามารถใช้ Docker หรือผู้ให้บริการคลาวด์รายใดก็ได้

ขั้นตอนที่ 1:ติดตั้งแพ็คเกจ NuGet ที่จำเป็น

ขั้นแรก คุณต้องติดตั้งแพ็คเกจแคช Redis

รันคำสั่งต่อไปนี้:

dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

แพ็คเกจนี้เชื่อมต่อแอปพลิเคชัน ASP.NET Core ของคุณกับ Redis และเปิดใช้งานการสนับสนุนแคชแบบกระจาย

ขั้นตอนที่ 2:กำหนดค่า Redis ใน ASP.NET Core

ต่อไป คุณต้องบอกแอปพลิเคชันของคุณว่าจะเชื่อมต่อกับ Redis อย่างไร

เปิด 08 ของคุณ ไฟล์และเพิ่มการกำหนดค่าต่อไปนี้:

builder.Services.AddStackExchangeRedisCache(options =>
{
 options.Configuration = "localhost:6379";
 options.InstanceName = "SampleApp_";
});

คำอธิบายด้วยคำศัพท์ง่ายๆ:

  • 16 → นี่คือที่อยู่ที่ Redis กำลังทำงานอยู่

  • 23 → คำนำหน้าเพิ่มให้กับคีย์แคชทั้งหมด (ช่วยในการจัดระเบียบข้อมูล)

หากคุณใช้ Cloud Redis ให้แทนที่ค่า localhost ด้วยสตริงการเชื่อมต่อของคุณ

ขั้นตอนที่ 3:ฉีดบริการ IDistributedCache

ASP.NET Core มีอินเทอร์เฟซในตัวที่เรียกว่า 38 เพื่อทำงานร่วมกับ Redis

คุณต้องฉีดเข้าไปในบริการหรือตัวควบคุมของคุณ

public class ProductService
{
 private readonly IDistributedCache _cache;
 public ProductService(IDistributedCache cache)
 {
 _cache = cache;
 }
}

พูดง่ายๆ ก็คือสิ่งนี้จะทำให้ชั้นเรียนของคุณสามารถพูดคุยกับ Redis ได้

ขั้นตอนที่ 4:จัดเก็บข้อมูลใน Redis Cache

หากต้องการจัดเก็บข้อมูลใน Redis คุณใช้ 43 วิธีการ.

public async Task SetCacheDataAsync(string key, string value)
{
 var options = new DistributedCacheEntryOptions
 {
 AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
 };
 await _cache.SetStringAsync(key, value, options);
}

เกิดอะไรขึ้นที่นี่:

  • คุณกำลังบันทึกข้อมูลโดยใช้คีย์เฉพาะ

  • คุณกำลังตั้งเวลาหมดอายุ (10 นาที)

เหตุใดการหมดอายุจึงมีความสำคัญ:

  • ป้องกันข้อมูลที่ล้าสมัย

  • รักษาแคชให้สะอาด

  • บันทึกหน่วยความจำ

ขั้นตอนที่ 5:ดึงข้อมูลจากแคช

หากต้องการรับข้อมูลจาก Redis คุณใช้:

public async Task<string> GetCacheDataAsync(string key)
{
 return await _cache.GetStringAsync(key);
}

หากมีข้อมูลจะส่งคืนทันที
ถ้าไม่เช่นนั้นก็จะคืนค่าเป็นโมฆะ

ซึ่งเร็วกว่าการโทรฐานข้อมูลมาก

ขั้นตอนที่ 6:ใช้รูปแบบ Cache-Aside

วิธีทั่วไปในการใช้แคชคือรูปแบบ Cache-Aside

ซึ่งหมายความว่า:

  1. ก่อนอื่นให้ตรวจสอบแคช

  2. หากมีข้อมูลอยู่ → ให้ส่งคืน

  3. ถ้าไม่ → ดึงข้อมูลจากฐานข้อมูลและเก็บไว้ในแคช

ตัวอย่าง:

public async Task<string> GetProductAsync(string productId)
{
 string cacheKey = $"product_{productId}";
 var cachedData = await _cache.GetStringAsync(cacheKey);
 if (!string.IsNullOrEmpty(cachedData))
 {
 return cachedData;
 }
 var productData = "Product from Database";
 await _cache.SetStringAsync(cacheKey, productData, new DistributedCacheEntryOptions
 {
 AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
 });
 return productData;
}

แนวทางนี้:

  • ลดการเรียกฐานข้อมูล

  • ปรับปรุงเวลาตอบสนอง

  • เติมแคชโดยอัตโนมัติเมื่อจำเป็น

ขั้นตอนที่ 7:การทำงานกับออบเจ็กต์ที่ซับซ้อน

Redis จัดเก็บข้อมูลเป็นสตริง ดังนั้นสำหรับออบเจ็กต์ คุณจะต้องแปลงเป็น JSON

public async Task SetObjectAsync<T>(string key, T data)
{
 var jsonData = JsonSerializer.Serialize(data);
 await _cache.SetStringAsync(key, jsonData);
}
public async Task<T> GetObjectAsync<T>(string key)
{
 var jsonData = await _cache.GetStringAsync(key);
 return jsonData == null ? default : JsonSerializer.Deserialize<T>(jsonData);
}

พูดง่ายๆ ก็คือ:

  • แปลงวัตถุ → JSON → จัดเก็บใน Redis

  • ดึงข้อมูล JSON → แปลงกลับเป็นวัตถุ

ขั้นตอนที่ 8:ลบข้อมูลออกจากแคช

บางครั้งคุณจำเป็นต้องลบข้อมูลแคชที่ล้าสมัยหรือไม่ถูกต้อง

await _cache.RemoveAsync("product_1");

สิ่งนี้มีประโยชน์เมื่อ:

  • ข้อมูลได้รับการอัพเดตในฐานข้อมูล

  • แคชไม่ถูกต้อง

ขั้นตอนที่ 9:แนวทางปฏิบัติที่ดีที่สุดสำหรับการแคช Redis

หากต้องการใช้ Redis อย่างมีประสิทธิภาพ ให้ปฏิบัติตามแนวทางปฏิบัติง่ายๆ เหล่านี้:

  • ใช้คีย์แคชที่ชัดเจนและไม่ซ้ำกัน

  • ตั้งเวลาหมดอายุเสมอ

  • อย่าแคชข้อมูลที่ละเอียดอ่อน

  • หลีกเลี่ยงการเก็บวัตถุที่มีขนาดใหญ่มาก

  • ตรวจสอบการใช้งานแคชและประสิทธิภาพ

แนวทางปฏิบัติเหล่านี้ช่วยรักษาประสิทธิภาพและหลีกเลี่ยงปัญหาในภายหลัง

ขั้นตอนที่ 10:กรณีการใช้งานทั่วไป

โดยทั่วไปแล้วการแคช Redis ใช้สำหรับ:

  • การแคชการตอบสนอง API

  • รายการผลิตภัณฑ์

  • เซสชันผู้ใช้

  • ข้อมูลที่เข้าถึงบ่อย

  • ข้อมูลแดชบอร์ด

หากมีการอ่านข้อมูลบ่อยครั้งแต่เปลี่ยนแปลงน้อยลง จะเป็นตัวเลือกที่ดีสำหรับการแคช

ข้อดีของการใช้ Redis ใน ASP.NET Core

การใช้ Redis ให้ประโยชน์หลายประการ:

  • ประสิทธิภาพของแอปพลิเคชันเร็วขึ้น

  • ลดภาระฐานข้อมูล

  • ความสามารถในการปรับขนาดที่ดีขึ้น

  • ปรับปรุงประสบการณ์ผู้ใช้

มีประโยชน์อย่างยิ่งในแอปพลิเคชันที่มีปริมาณการใช้งานสูง

สรุป

การแคชแบบกระจายด้วย Redis ใน ASP.NET Core เป็นวิธีที่เรียบง่ายแต่ทรงพลังในการปรับปรุงประสิทธิภาพของแอปพลิเคชัน แทนที่จะเรียกฐานข้อมูลซ้ำๆ คุณจะจัดเก็บข้อมูลที่ใช้บ่อยไว้ใน Redis และเรียกค้นข้อมูลได้อย่างรวดเร็วเมื่อจำเป็น เมื่อปฏิบัติตามแนวทางทีละขั้นตอน โดยใช้รูปแบบ เช่น Cache-Aside และนำแนวทางปฏิบัติที่ดีที่สุดไปใช้ คุณจะสามารถสร้างแอปพลิเคชันที่รวดเร็ว ปรับขนาดได้ และมีประสิทธิภาพ เริ่มต้นจากเล็กๆ ใช้แคชในส่วนที่สำคัญที่สุด และค่อยๆ เพิ่มประสิทธิภาพระบบของคุณเพื่อประสิทธิภาพที่ดีขึ้น