Coding Gun

การสร้าง Distributed Cached ด้วย Redis

Redis ใช้ทำอะไร?

Redis ถือได้ว่าเป็น In-memory database ที่ถูกนำมาใช้ทำ distributed cache มากที่สุด ในบทความนี้จะพาคุณไปรู้จักกับ Redis เบื้องต้น ก่อนจะไปรู้จักกับ Redis ผมจะพาไปรู้จักกับ Distributed Cached กันก่อนเพื่อความเข้าใจ

Distributed Cache คือ Cache ที่แชร์ให้กับ applications หรือ services ใช้ร่วมกัน ใช้ใน application ที่ host บน cloud services หรือ server farm

ใน microservices เราจะให้ services ต่างๆใช้ cache ร่วมกัน เพื่อให้ได้ประโยชน์ต่างๆเหล่านี้

Redis Modules

redis ไม่ได้มีดีแค่การเป็น in-memory database เท่านั้น แต่ยังสามารถเพิ่มความสามารถอื่นๆ ให้กับ redis ได้ด้วยการคิดคั้ง module เพิ่มเข้าไป ซึ่งจะทำให้ redis กลายเป็น database ประเภทอื่นๆได้ด้วย ซึ่งจะทำให้ redis สามารถทำ polyglot persistence(เลือกใช้ database หลายๆแบบ เพื่อให้เหมาะกับประเภทของข้อมูล) ได้ซึ่ง module ที่น่าในใจของ redis มีดังนี้

จะเห็นว่า redis เองนั้นสามารถแปลงตัวเองให้กลายเป็น database แบบต่างๆได้เยอะมาก รวมทั้ง redis ที่เป็น In-memory database นั้นสามารถ backup ข้อมูลลง disk ได้ด้วยการ set append only file(aof) หรือ Redis Database(RDB)

Redis Persistence

เราสามารถ config redis(แก้ไฟล์ redis.conf) ให้เก็บข้อมูลลงใน disk ได้ ด้วย 4 วิธีนี้

  1. RDB (Redis Database): RDB persistence จะทำการ snapshots เหมือนกับใน database ทั่วไปแต่จะสามารถกำหนดเป็นจำนวน operation ได้ เช่น

    save 3600 1 300 100 60 10000 10 100000
    

    ในตัวอย่างนี้จะเป็นกำหนดว่า ถ้ามี key changes(ข้อมูลมีการเปลี่ยนแปลง) มากกว่า 100,000 ให้ snapshort ทุกๆ 10 วินาที แต่ถ้ามี key changes น้อยกว่า 100,000 แต่มากกว่า 10,000 ให้ snapshort ทุกๆ 60 วินาที ไล่ตามเงื่อนไขนี้ไปเรื่อยๆจนจบ

  2. AOF (Append Only File): AOF persistence จะเป็นการเก็บ logs ของการ write operation ไว้ด้วย format ของ redis เองซึ่งจะสามารถมีนามสกุล .aof เราสามารถเปิด feature นี้ด้วยการ set ใน redis.conf ตามนี้

    appendonly yes
    appendfilename "appendonly.aof"
    
  3. No persistence: ถ้าต้องการให้ redis ทำหน้าที่เป็นแค่ caching เท่านั้นให้ปิด Append Only File(AOF) และ Redis Database(RDB)

  4. RDB + AOF: คุณสามารถเลือกเปิดทั้ง Append Only File(AOF) และ Redis Database(RDB) พร้อมกันได้เลย redis จะเก็บ Logs ลงใน AOF แค่ Operation ที่ยังไม่ได้ถูก Snapshort ไว้เท่านั้น

การติดตั้ง Redis Server ด้วย docker

เราสามารถนำ redis มาใช้งานในเครื่องได้ด้วยคำสั่งนี้

docker run -p 6379:6379 --rm redis redis-server

คำสั่งนี้จะเป็นการตั้ง redis server ขึ่้นมา โดย redis จะใช้ port 6379 ในการสื่อสาร

จัดการ Redis ผ่านทาง Command Line

การเชื่อมต่อกับ redis server เราจะใช้ redis cli ซึ่งจะใช้วิธีการ Download จากที่นี่ได้เลย ซึ่งการใข้งานบน Windows นั้นต้องใช้ run redis-cli ผ่านทาง WSL เท่านั้น จึงทำให้การใช้งานไม่ค่อยสะดวกเท่าไหร่นักในบมความนี้ ผมเลยเลือกใช้ redis-cli ผ่านทาง docker ซึ่งจะง่ายกว่ามาก

docker run -it --rm redis redis-cli -h host.docker.internal

เนื่องจาก container 2 ตัวนี้่ไม่ได้สร้างบน network เดียวกัน ทำให้เราต้อง connect เข้าไปที่ redis server โดยใช้ host.docker.internal แต่ถ้าคุณนำไปสร้างด้วย docker-compose ก็จะต้องอ้าง host ด้วยชื่อ service ใน docker-compose แทน

หลังจากนั้น เราจะเข้าสู่ shell ของ redis ซึ่งเราจะทำการ check ก่อนว่า redis-server นั้นพร้อมใช้งานหรือไม่ด้วยคำสั่ง PING ถ้า redis server ตอบ PONG กลับมาแสดงว่าใช้ได้

redis host.local.internal:6379> ping
PONG

หรือจะเรียกผ่าน redis-cli ตรงๆ แบบนี้ก็ได้

$ redis-cli ping
PONG

จัดการ Redis ผ่าน GUI ด้วย RedisInsight

เราสามารถเลือกจัดการกับ Redis server ผ่านทาง UI ด้วย RedisInsight ซึ่งสามารถ Download ได้จากที่นี่ โดยที่ RedisInsight จะมี feature หลักๆ ดังนี้

อ่านข้อมูลเพิ่มเติมได้ที่

Phanupong Permpimol
Follow me

Software Engineer ที่เชื่อในเรื่องของ Process เพราะเมื่อ Process ดี Product ก็จะดีตาม ปัจจุบันเป็นอาจารย์และที่ปรึกษาด้านการออกแบบและพัฒนา Software และ Web Security