บทนำ
ในโลกดิจิทัลที่เร่งรีบวันนี้ แอปพลิเคชันคาดหวังให้ส่งมอบประสิทธิภาพสูงและตอบสนองเร็ว วิธีหนึ่งคือการนำกลไก caching มาใช้เก็บข้อมูลที่เข้าถึงบ่อย ลดการดึงข้อมูลจากฐานข้อมูลซ้ำๆ Redis เป็น in-memory data store ยอดนิยมที่ให้โซลูชัน caching แบบ robust สำหรับ .NET Core applications ในบทความนี้ เราจะสำรวจวิธีรวม Redis cache ในแอป .NET Core 6 พร้อมตัวอย่างปฏิบัติ
ข้อกำหนดเบื้องต้น
ก่อนเริ่ม ตรวจสอบว่ามีสิ่งต่อไปนี้ติดตั้งแล้ว:
- .NET Core 6 SDK: ติดตั้ง .NET Core 6 SDK หรือใหม่กว่า ดาวน์โหลดจากเว็บไซต์ .NET อย่างเป็นทางการ
- Redis Server: ติดตั้งและรัน Redis server ในเครื่องท้องถิ่น หรือใช้ Redis cloud service
ติดตั้ง Redis Server บน Windows
ดาวน์โหลด Redis
คุณสามารถดาวน์โหลด Redis เวอร์ชันที่ค่อนข้างเก่า (precompiled) สำหรับ Windows 64-bit จาก GitHub: https://github.com/MicrosoftArchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.msi
คลิกลิงก์นี้ จะได้ไฟล์ .msi ซึ่งเป็น Windows installer ไปที่โฟลเดอร์ Downloads หาไฟล์นี้
คลิกไฟล์และติดตั้ง Redis
Redis Server จะติดตั้งที่ C:\Program Files\Redis จะมีไฟล์ .exe ชื่อ redis-server

เปิด command line และรันคำสั่ง:
redis-server

Redis server เริ่มทำงานแล้ว
คุณสามารถ monitor การอัปเดตและการเปลี่ยนแปลงใน Redis server ด้วยคำสั่ง:
redis-cli monitor

สร้าง .NET Core 6 Console Application
dotnet new console -n RedisCacheDemo
นำทางไปโฟลเดอร์โปรเจกต์
cd RedisCacheDemo
ติดตั้งแพ็กเกจที่จำเป็น
dotnet add package StackExchange.Redis
กำหนดค่าการเชื่อมต่อ Redis
ในไฟล์ Program.cs เพิ่ม statement ที่จำเป็น และกำหนดค่า Redis connection ในเมธอด Main:
static void Main(string[] args) {
var configuration = ConfigurationOptions.Parse("localhost:6379");
var redisConnection = ConnectionMultiplexer.Connect(configuration);
var redisCache = redisConnection.GetDatabase();
Console.WriteLine("Fetching data with caching:");
var cachedData = GetDataWithCaching(redisCache);
Console.WriteLine($"Result: {cachedData}");
Console.WriteLine("Fetching data without caching:");
var uncachedData = GetDataFromDatabase();
Console.WriteLine($"Result: {uncachedData}");
redisConnection.Close(); // สำคัญ: ปิด connection
}
static string GetDataFromDatabase() {
// จำลองการดึงข้อมูลจาก database
// แทนที่ด้วย logic การดึงข้อมูลจริงของคุณ
Thread.Sleep(2000); // จำลอง latency
return "Start";
}
static string GetDataWithCaching(IDatabase redisCache) {
// redisCache.KeyDelete("cachedData"); // สำหรับลบ Cache
// redisCache.StringSet("cachedData", "Test", TimeSpan.FromMinutes(1)); // สำหรับอัปเดต Cache
string cachedData = redisCache.StringGet("cachedData");
if (string.IsNullOrEmpty(cachedData)) {
cachedData = GetDataFromDatabase();
redisCache.StringSet("cachedData", cachedData, TimeSpan.FromMinutes(1));
}
return cachedData;
}
รันโปรแกรมนี้ต่อไป
ในผลลัพธ์นี้ ผลลัพธ์พร้อมและไม่พร้อม cache เหมือนกัน เพราะ output ถูกเก็บใน cache ครั้งแรกที่สร้างขึ้น อย่างไรก็ตาม หากมีการเปลี่ยนแปลงในโค้ด ผลลัพธ์จะต่างกัน
static string GetDataFromDatabase() {
// จำลองการดึงข้อมูลจาก database
Thread.Sleep(2000); // จำลอง latency
return "Last";
}
ผมอัปเดตค่าในโค้ดและรันใหม่
ในผลลัพธ์นี้ ค่าแรกดึงจาก cache และค่าที่สองดึงโดยไม่ใช้ cache
สรุป
ยินดีด้วย! คุณรวม Redis cache เข้าแอป .NET Core 6 สำเร็จแล้ว ด้วยการนำ caching มาใช้ คุณปรับปรุงประสิทธิภาพและความตอบสนองของแอปพลิเคชัน ทำให้มีประสิทธิภาพมากขึ้นในการจัดการข้อมูลที่เข้าถึงบ่อย