
บทนำ
เมื่อคุณสร้างแอปพลิเคชัน 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
ซึ่งหมายความว่า:
-
ก่อนอื่นให้ตรวจสอบแคช
-
หากมีข้อมูลอยู่ → ให้ส่งคืน
-
ถ้าไม่ → ดึงข้อมูลจากฐานข้อมูลและเก็บไว้ในแคช
ตัวอย่าง:
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 และนำแนวทางปฏิบัติที่ดีที่สุดไปใช้ คุณจะสามารถสร้างแอปพลิเคชันที่รวดเร็ว ปรับขนาดได้ และมีประสิทธิภาพ เริ่มต้นจากเล็กๆ ใช้แคชในส่วนที่สำคัญที่สุด และค่อยๆ เพิ่มประสิทธิภาพระบบของคุณเพื่อประสิทธิภาพที่ดีขึ้น