12/04/2026 18:16น.

Ep.20 Go กับ Caching เพิ่มความเร็วให้โปรแกรม
#Superdev School
#โปรแกรมเมอร์
#ภาษาโปรแกรม
#ฝึกเขียนโปรแกรม
#การเขียนโปรแกรมสำหรับมือใหม่
#การเขียนโปรแกรม Go
#การศึกษาการเขียนโปรแกรม
#การเขียนโปรแกรม
#การพัฒนาโปรแกรม
#หน่วยความจำ
#ข้อมูล
#TTL
#โปรแกรม
#เพิ่มความเร็ว
#ภาษา Go
#Golang
#Go
#Caching
Go กับ Caching เพิ่มความเร็วให้โปรแกรม
Caching คืออะไร?
Caching คือการเก็บข้อมูลบางอย่างไว้ในหน่วยความจำ เพื่อให้สามารถเข้าถึงข้อมูลนั้นได้อย่างรวดเร็วโดยไม่ต้องเรียกซ้ำจากแหล่งข้อมูลเดิม เช่น การเก็บผลลัพธ์จากฐานข้อมูลที่เรียกบ่อยๆ ไว้ในหน่วยความจำ ทำให้โปรแกรมโหลดข้อมูลได้เร็วขึ้น
ประโยชน์ของ Caching
1. เพิ่มความเร็ว : ลดการดึงข้อมูลจากแหล่งข้อมูลภายนอก (เช่น ฐานข้อมูล) และเพิ่ม
2. ความเร็วในการเข้าถึงข้อมูล
ลดการใช้ทรัพยากร : ลดจำนวนการดึงข้อมูลซ้ำๆ ช่วยลดการทำงานของระบบ
3.เหมาะสำหรับข้อมูลที่ไม่เปลี่ยนบ่อย : เหมาะกับข้อมูลที่ไม่เปลี่ยนแปลงบ่อย เช่น รายการสินค้า ค่าตั้งต้น เป็นต้น
การสร้าง Cache แบบง่ายๆ ด้วย Map ใน Go
ใน Go เราสามารถสร้าง Cache แบบง่ายๆ ได้โดยใช้ map ซึ่งทำหน้าที่เก็บข้อมูลในหน่วยความจำและดึงข้อมูลได้อย่างรวดเร็ว
ตัวอย่างโค้ด Cache แบบง่ายๆ:
ในตัวอย่างนี้: เราสร้าง Cache struct ที่มี map สำหรับเก็บข้อมูล Set ใช้เก็บข้อมูลใน Cache ส่วน Get ใช้ดึงข้อมูลจาก Cache
package main
import (
"fmt"
)
type Cache struct {
data map[string]string
}
func (c *Cache) Set(key, value string) {
c.data[key] = value
}
func (c *Cache) Get(key string) (string, bool) {
value, found := c.data[key]
return value, found
}
func main() {
cache := Cache{data: make(map[string]string)}
cache.Set("name", "Alice")
cache.Set("country", "Thailand")
if value, found := cache.Get("name"); found {
fmt.Println("Cached value:", value)
} else {
fmt.Println("Value not found in cache")
}
}
การตั้งค่าระยะเวลาหมดอายุให้กับ Cache (TTL - Time to Live)
บางครั้งเราต้องการให้ข้อมูลใน Cache หมดอายุหลังจากเวลาที่กำหนด เพื่อให้แน่ใจว่าข้อมูลที่ใช้งานยังเป็นข้อมูลที่อัปเดตใหม่
ตัวอย่างโค้ดการตั้งค่า TTL ให้กับ Cache:
ในตัวอย่างนี้:
เราเพิ่ม expiration ให้กับข้อมูลใน Cache โดยใช้ time.Now().Add(ttl).Unix() เพื่อกำหนดเวลาหมดอายุ
เมื่อตรวจสอบข้อมูลใน Cache จะเช็คว่าเวลาหมดอายุผ่านไปหรือยัง หากหมดอายุแล้วจะถือว่าข้อมูลนั้นไม่มีใน Cache
package main
import (
"fmt"
"time"
)
type CacheItem struct {
value string
expiration int64
}
type Cache struct {
data map[string]CacheItem
}
func (c *Cache) Set(key, value string, ttl time.Duration) {
expiration := time.Now().Add(ttl).Unix()
c.data[key] = CacheItem{value: value, expiration: expiration}
}
func (c *Cache) Get(key string) (string, bool) {
item, found := c.data[key]
if !found || time.Now().Unix() > item.expiration {
return "", false
}
return item.value, true
}
func main() {
cache := Cache{data: make(map[string]CacheItem)}
cache.Set("session_id", "abc123", 5*time.Second)
if value, found := cache.Get("session_id"); found {
fmt.Println("Cached value:", value)
} else {
fmt.Println("Value not found in cache or expired")
}
time.Sleep(6 * time.Second) // รอให้ Cache หมดอายุ
if value, found := cache.Get("session_id"); found {
fmt.Println("Cached value:", value)
} else {
fmt.Println("Value not found in cache or expired")
}
}
ตัวอย่างการใช้งาน Cache ในโปรแกรมจริง
ในโปรแกรมจริง การทำ Caching มักจะใช้กับข้อมูลที่ไม่เปลี่ยนแปลงบ่อย เช่น ข้อมูลผู้ใช้ สินค้า หรือการตั้งค่า ซึ่งทำให้โปรแกรมดึงข้อมูลได้เร็วขึ้นและลดการโหลดข้อมูลซ้ำจากฐานข้อมูล
สรุปง่ายๆ
Cache ช่วยเพิ่มความเร็ว : ใช้เก็บข้อมูลที่เรียกบ่อยเพื่อลดการโหลดซ้ำ
ตั้งค่า TTL: ให้ Cache หมดอายุเมื่อถึงเวลาที่กำหนด เพื่อลดปัญหาข้อมูลเก่า
ใช้ map ใน Go สำหรับเก็บ Cache: map ทำให้ดึงข้อมูลได้รวดเร็ว