วิธีใช้การแคชในหน่วยความจำใน ASP.NET Core

ASP.NET Core เป็นเฟรมเวิร์กแบบลีนและโมดูลาร์ที่สามารถใช้สร้างเว็บแอปพลิเคชันที่มีประสิทธิภาพสูงบน Windows, Linux หรือ MacOS ซึ่งแตกต่างจาก ASP.NET ดั้งเดิม ASP.NET Core ไม่มีCacheวัตถุ อย่างไรก็ตาม ASP.NET Core ให้การสนับสนุนสำหรับการแคชประเภทต่างๆรวมถึงการแคชในหน่วยความจำการแคชแบบกระจายและการแคชการตอบกลับ

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

วิธีเปิดใช้งานการแคชในหน่วยความจำใน ASP.NET Core

แคชในหน่วยความจำใน ASP.NET Core เป็นบริการที่คุณสามารถรวมเข้ากับแอปพลิเคชันของคุณโดยใช้การฉีดขึ้นต่อ เมื่อคุณสร้างโครงการ ASP.NET Core ใน Visual Studio แล้วคุณสามารถเปิดใช้งานแคชในหน่วยความจำในConfigureServicesวิธีการในStartupคลาสดังที่แสดงในข้อมูลโค้ดด้านล่าง

โมฆะสาธารณะ ConfigureServices (บริการ IServiceCollection)

{

    services.AddMvc ();

    services.AddMemoryCache ();

}

ในการทำงานกับแคชในหน่วยความจำใน ASP.NET Core คุณต้องใช้IMemoryCacheอินเทอร์เฟซ นี่คือลักษณะ: 

อินเทอร์เฟซสาธารณะ IMemoryCache: IDisposable

{

    บูล TryGetValue (คีย์วัตถุออกค่าวัตถุ);

    ICacheEntry CreateEntry (คีย์ออบเจ็กต์);

    โมฆะลบ (คีย์วัตถุ);

}

คุณสามารถลงทะเบียนIMemoryCacheใน  ConfigServicesวิธีการโดยใช้AddMemoryCacheวิธีการที่เราตรวจสอบข้างต้น จากนั้นคุณควรฉีดวัตถุแคชในตัวสร้างของคลาสคอนโทรลเลอร์ของคุณดังที่แสดงในข้อมูลโค้ดด้านล่าง

  แคช IMemoryCache ส่วนตัว

  CacheController สาธารณะ (แคช IMemoryCache)

        {

            this.cache = แคช;

        }

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

วิธีจัดเก็บและดึงข้อมูลวัตถุโดยใช้ ASP.NET Core IMemoryCache

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

[HttpGet]

        สตริงสาธารณะรับ ()

        {

            cache.Set (“ คีย์”, DateTime.Now ToString ());

            กลับ“ นี่คือวิธีทดสอบ ... ”;

        }

ในการดึงรายการจากแคชคุณสามารถใช้ประโยชน์จากGet()วิธีการดังที่แสดงด้านล่าง

  [HttpGet (“ {key}”)]

        รับสตริงสาธารณะ (คีย์สตริง)

        {

            คืนแคชรับ (คีย์);

        }

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

 [HttpGet]

        สตริงสาธารณะรับ ()

        {

            คีย์สตริง;

            สตริง obj;

            ถ้า (! cache.TryGetValue (คีย์ออก obj))

            {

                obj = DateTime.Now ToString ();

                cache.Set (คีย์ obj);

            }

            กลับ obj;

        }

มีวิธีการอื่นที่เรียกว่าGetOrCreateที่สามารถใช้เพื่อดึงข้อมูลแคชตามคีย์ที่ให้มา หากไม่มีคีย์เมธอดจะสร้างขึ้น

[HttpGet]

        สตริงสาธารณะรับ ()

        {

            คืนแคช GetOrCreate (“ คีย์”,

                cacheEntry => {

                            คืน DateTime.Now ToString ();

                         });

        }

GetOrCreateAsyncโปรดทราบว่าเป็นรุ่นที่ไม่ตรงกันของวิธีการนี้สามารถใช้ได้ที่เรียกว่า นี่คือรายการรหัสทั้งหมดของCacheControllerชั้นเรียนของเราสำหรับการอ้างอิงของคุณ

ใช้ระบบ;

ใช้ Microsoft.AspNetCore.Mvc;

ใช้ Microsoft.Extensions.Caching.Memory;

เนมสเปซ InMemoryCaching.Controllers

{

    [เส้นทาง (“ api / [ตัวควบคุม]”)]

    CacheController ระดับสาธารณะ: คอนโทรลเลอร์

    {

        แคช IMemoryCache ส่วนตัว

        CacheController สาธารณะ (แคช IMemoryCache)

        {

            this.cache = แคช;

        }

        [HttpGet]

        สตริงสาธารณะรับ ()

        {

            คืนแคช GetOrCreate (“ คีย์”,

                cacheEntry => {

                            คืน DateTime.Now ToString ();

                         });

        }

    }

}

วิธีตั้งค่านโยบายการหมดอายุของข้อมูลแคชใน ASP.NET Core

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

ในการกำหนดนโยบายการหมดอายุคุณต้องใช้MemoryCacheEntryOptionsคลาสดังที่แสดงในข้อมูลโค้ดด้านล่าง

MemoryCacheEntryOptions cacheExpirationOptions = MemoryCacheEntryOptions ใหม่ ();

cacheExpirationOptions.AbsoluteExpiration = DateTime.Now.AddMinutes (30);

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

cache.Set (“ คีย์”, DateTime.Now ToString (), cacheExpirationOptions);

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

ในการกำหนดลำดับความสำคัญเราใช้CacheItemPriorityenum ซึ่งอาจมีค่าที่เป็นไปได้อย่างใดอย่างหนึ่งต่อไปนี้: ต่ำปกติสูงและไม่เคยลบ ผู้ให้บริการแคชในหน่วยความจำใน ASP.NET CacheItemPriority.NeverRemoveหลักจะลบรายการแคชเมื่ออยู่ภายใต้ความดันหน่วยความจำจนกว่าคุณจะได้กำหนดลำดับแคช

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

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler นี้);

คุณยังสามารถตั้งค่าการอ้างอิงระหว่างวัตถุที่แคช ตัวอย่างเช่นคุณอาจต้องการลบบางรายการออกจากแคชหากรายการที่เกี่ยวข้องบางรายการถูกลบออก เราจะสำรวจเพิ่มเติมและคุณสมบัติอื่น ๆ ของการแคชใน ASP.NET Core ในโพสต์ในอนาคตของฉันที่นี่ ในระหว่างนี้คุณอาจต้องการดูหน้าที่เกี่ยวข้องในเอกสาร ASP.NET Core ของ Microsoft 

วิธีทำเพิ่มเติมใน ASP.NET และ ASP.NET Core:

  • วิธีใช้การแคชในหน่วยความจำใน ASP.NET Core
  • วิธีจัดการข้อผิดพลาดใน ASP.NET Web API
  • วิธีส่งพารามิเตอร์หลายตัวไปยังวิธีควบคุม Web API
  • วิธีบันทึกข้อมูลเมตาการร้องขอและการตอบกลับใน ASP.NET Web API
  • วิธีการทำงานกับ HttpModules ใน ASP.NET
  • การกำหนดเวอร์ชันขั้นสูงใน ASP.NET Core Web API
  • วิธีใช้การฉีดพึ่งพาใน ASP.NET Core
  • วิธีการทำงานกับเซสชันใน ASP.NET
  • วิธีทำงานกับ HTTPHandlers ใน ASP.NET
  • วิธีใช้ IHostedService ใน ASP.NET Core
  • วิธีการใช้บริการ WCF SOAP ใน ASP.NET Core
  • วิธีปรับปรุงประสิทธิภาพของแอปพลิเคชัน ASP.NET Core
  • วิธีใช้ ASP.NET Core Web API โดยใช้ RestSharp
  • วิธีการทำงานกับการเข้าสู่ระบบใน ASP.NET Core
  • วิธีใช้ MediatR ใน ASP.NET Core
  • วิธีการทำงานกับสถานะเซสชันใน ASP.NET Core
  • วิธีใช้ Nancy ใน ASP.NET Core
  • ทำความเข้าใจการผูกพารามิเตอร์ใน ASP.NET Web API
  • วิธีอัพโหลดไฟล์ใน ASP.NET Core MVC
  • วิธีใช้การจัดการข้อยกเว้นส่วนกลางใน ASP.NET Core Web API
  • วิธีใช้การตรวจสอบความสมบูรณ์ใน ASP.NET Core
  • แนวทางปฏิบัติที่ดีที่สุดในการแคชใน ASP.NET
  • วิธีใช้ Apache Kafka Messaging ใน. NET
  • วิธีเปิดใช้งาน CORS บน Web API ของคุณ
  • เมื่อใดควรใช้ WebClient กับ HttpClient เทียบกับ HttpWebRequest
  • วิธีการทำงานกับ Redis Cache ใน. NET
  • เมื่อใดควรใช้ Task.WaitAll กับ Task whenAll ใน. NET