0Pricing
C# Academy · บทเรียน

ส่วน抽象ของ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ส่วน抽象ของ IDistributedCache
  2. การเชื่อมต่อ Redis
  3. รูปแบบการแคชและการหมดอายุ
  4. การแคชออบเจ็กต์ที่ทำให้เป็นอนุกรม
← กลับไปที่ C# Academy