การดู : 0

12/04/2026 18:16น.

Ep.20 Go กับ Caching เพิ่มความเร็วให้โปรแกรม

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 ทำให้ดึงข้อมูลได้รวดเร็ว