เนื่องด้วยเพิ่งเข้าไปดูและแก้ไขปัญหาของ Redis server
จึงทำการสรุปแนวทางการแก้ไว้นิดหน่อย

ฝั่งของ server ทำการ configuration ดังนี้

  • กำหนด max memory เนื่องจากค่า default คือ unlimit ยิ่งเป็น redis แบบ replica/cluster ด้วยแล้วยิ่งต้องกำหนด เพราะว่าต้องเผื่อให้กับ output buffer การทำงานระหว่างเครื่อง และของ system อีกด้วย
  • กำหนด max client เนื่องจากค่า default = 10,000
  • กำหนดค่า tcp backlog กำหนดขนาดของ complete connection queue มีค่า default = 511 ซึ่งสามารถเพิ่มได้
  • ถ้าใช้งาน replica แล้ว ให้กำหนดการเขียนเฉพาะใน master/primary server เท่านั้น ส่วนเครื่อง replica/slave กำหนดให้อ่านเท่านั้น slave-read-only yes
  • ในระดับ OS ก็ต้องกำหนดด้วย ทั้ง disable virtual memory และ จำนวนของการเปิดอ่าน file (file descriptor limit)
  • ปรับปรุง policy การทำ save snapshot ให้เหมาะสมกับการใช้งาน
  • อย่าลืมกำหนดค่า slow log ด้วย ทั้ง slowlog-log-slower-than และ slowlog-max-len
  • log ต่าง ๆ ของ redis สามารถให้พ่นออก syslog ได้เลย เพื่อให้ส่งไปยัง centralized log server ได้ง่าย ๆ กำหนดดังนี้ syslog-enabled yes

ฝั่งของ client

  • อย่าลืมใช้ connection pool
  • อย่าลืมใช้งาน pipelining เพื่อปรับปรุงการดึงข้อมูลให้เร็วขึ้น

ชุดคำสั่งที่น่าสนใจ ใน redis-cli

  • redis-cli –bigkeys สำหรับดู key ที่มีขนาดใหญ่หรือ item เยอะ ๆ
  • redis-cli –memkeys สำหรับดู key ที่มีใช้ memory เยอะ ๆ
  • redis-cli MONITOR สำหรับดูการใช้งานคำสั่งต่าง ๆ แบบ realtime/stream
  • redis-cli slowlog <size>