ส่วน抽象ของ IDistributedCache
แคชข้อมูลข้ามเซิร์ฟเวอร์หลายเครื่อง
ส่วน抽象ของ IDistributedCache เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องใช้แคชแบบกระจาย
แคชในหน่วยความจำจะอยู่ภายในกระบวนการเดียว จึงหายไปเมื่อเริ่มทำงานใหม่และไม่ถูกแบ่งปันระหว่างเซิร์ฟเวอร์ แคชแบบกระจายจะอยู่ในที่เก็บข้อมูลภายนอก เช่น Redis ซึ่งทุกอินสแตนซ์ของแอปพลิเคชันสามารถอ่านและเขียนได้ ทำให้การแคชสอดคล้องกันในการนำระบบไปใช้งานแบบขยายออกไปหลายเซิร์ฟเวอร์
อินเทอร์เฟซ IDistributedCache
ASP.NET Core แยกความซับซ้อนของแคชแบบกระจายไว้เบื้องหลัง IDistributedCache ใน Microsoft.Extensions.Caching.Distributed โค้ดของคุณพึ่งพาอินเทอร์เฟซนี้ ไม่ได้พึ่งพา Redis โดยตรง คุณจึงสามารถสลับการติดตั้งใช้งานได้
public interface IDistributedCache
{
byte[] Get(string key);
Task<byte[]> GetAsync(string key, CancellationToken token = default);
void Set(string key, byte[] value, DistributedCacheEntryOptions options);
void Remove(string key);
void Refresh(string key);
}จัดเก็บไบต์
โปรดสังเกตว่าแคชจัดเก็บข้อมูลเป็น byte[] หากต้องการแคชสตริงหรืออ็อบเจ็กต์ คุณต้องซีเรียลไลซ์ข้อมูลเหล่านั้นก่อน และมีเมธอดส่วนขยายสำหรับสตริงให้ใช้ในกรณีทั่วไป
using Microsoft.Extensions.Caching.Distributed;
await cache.SetStringAsync("greeting", "Hello, world");
string value = await cache.GetStringAsync("greeting");การฉีดแคชเข้าสู่บริการ
ร้องขอ IDistributedCache ผ่านการฉีดผ่านตัวสร้างเช่นเดียวกับบริการอื่น ๆ
public class WeatherService
{
private readonly IDistributedCache _cache;
public WeatherService(IDistributedCache cache)
{
_cache = cache;
}
}การอ่านจากแคช
GetStringAsync จะคืนค่า null เมื่อไม่พบคีย์หรือคีย์หมดอายุ คุณต้องจัดการกรณีที่ไม่พบข้อมูลในแคชเสมอ
string cached = await _cache.GetStringAsync("forecast:istanbul");
if (cached is null)
{
// cache miss: load from source
}การเขียนลงแคช
SetStringAsync จะจัดเก็บค่าพร้อมตัวเลือกการหมดอายุที่ไม่บังคับ ซึ่งจะกล่าวถึงในบทเรียนถัดไป
await _cache.SetStringAsync(
"forecast:istanbul",
"22C sunny",
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
});การนำออกและการรีเฟรช
RemoveAsync จะนำคีย์ออกจากแคช เช่น เมื่อข้อมูลต้นทางมีการเปลี่ยนแปลง ส่วน RefreshAsync จะเริ่มตัวจับเวลาการหมดอายุแบบเลื่อนใหม่โดยไม่เปลี่ยนค่า
await _cache.RemoveAsync("forecast:istanbul");
await _cache.RefreshAsync("session:abc123");การติดตั้งใช้งานในหน่วยความจำ
สำหรับการพัฒนาหรือการทดสอบ ให้ลงทะเบียนแคชแบบกระจายในหน่วยความจำ แคชนี้ใช้อินเทอร์เฟซเดียวกัน ดังนั้นโค้ดของคุณจึงเหมือนเดิม แต่ข้อมูลจะไม่ได้ถูกใช้ร่วมกันจริงระหว่างกระบวนการ
builder.Services.AddDistributedMemoryCache();โค้ดที่ไม่ยึดติดกับผู้ให้บริการ
เนื่องจากคุณพึ่งพาเฉพาะ IDistributedCache การเปลี่ยนจากผู้ให้บริการในหน่วยความจำไปยัง Redis หรือ SQL Server จึงเป็นการเปลี่ยนบรรทัดลงทะเบียนเพียงบรรทัดเดียว โดยไม่ต้องเปลี่ยนโค้ดในบริการของคุณ
หลักการตั้งชื่อคีย์
ใช้คีย์ที่มีโครงสร้างและมีเนมสเปซ เช่น entity:id:field ตัวอย่างเช่น user:42:profile หลักการตั้งชื่อที่ชัดเจนช่วยป้องกันการชนกันของคีย์ และทำให้คาดการณ์การล้างแคชได้
string key = $"user:{userId}:profile";กรณีที่ไม่ควรใช้แคช
ควรแคชข้อมูลที่มีการอ่านบ่อยและเปลี่ยนแปลงไม่บ่อย ข้อมูลที่เปลี่ยนแปลงตลอดเวลาหรือข้อมูลละเอียดอ่อนเฉพาะผู้ใช้อาจไม่เหมาะกับแคช และต้องชั่งน้ำหนักความเสี่ยงจากข้อมูลล้าสมัยเทียบกับประสิทธิภาพที่เพิ่มขึ้นเสมอ
ตรวจสอบอย่างรวดเร็ว
ทดสอบแนวคิดการแยกความซับซ้อนของ IDistributedCache
สรุปทบทวน
IDistributedCache แยกความซับซ้อนของแคชภายนอกที่ใช้ร่วมกัน ทำให้ทุกอินสแตนซ์ของแอปมองเห็นข้อมูลชุดเดียวกัน แคชจัดเก็บข้อมูลเป็น byte[] และมี GetStringAsync/SetStringAsync สำหรับสตริง รวมถึง RemoveAsync และ RefreshAsync การพึ่งพาอินเทอร์เฟซช่วยให้โค้ดไม่ยึดติดกับผู้ให้บริการ และสามารถสลับระหว่าง AddDistributedMemoryCache กับ Redis ได้ด้วยการเปลี่ยนเพียงบรรทัดเดียว ควรใช้คีย์ที่มีเนมสเปซและชื่อชัดเจน
คำถามที่พบบ่อย
บทเรียน “ส่วน抽象ของ IDistributedCache” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ส่วน抽象ของ IDistributedCache” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ส่วน抽象ของ IDistributedCache”
แคชข้อมูลข้ามเซิร์ฟเวอร์หลายเครื่อง คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ส่วน抽象ของ IDistributedCache” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ส่วน抽象ของ IDistributedCache
- การเชื่อมต่อ Redis
- รูปแบบการแคชและการหมดอายุ
- การแคชออบเจ็กต์ที่ทำให้เป็นอนุกรม