เนื่องด้วยเพิ่งเข้าไปดูและแก้ไขปัญหาของ 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>