redis-300dpi
หลายคนรู้จัก Redis บางคนไม่รู้จัก จริงๆ Redis ก็เปรียบเสมือน Database ประเภทหนึ่ง แต่เรามักเอามาใช้ในงาน เป็น Cache ซะส่วนใหญ่แต่จริงๆ นั้นถ้าเอามาใช้เป็น DB ก็ไม่ได้แปลกอะไรนะครับเพราะมันทำงานได้ดีเลยล่ะ บทความนี้ไม่ได้แนะนำการใช้ Redis แต่เป็นการเอา Redis มาใช้กับ Production นะครับ configuration ที่เป็น Default ที่มากับ Redis นั้นผมไม่ได้กล่าวถึงนะครับเอาเป็นว่าเริ่มกันแบบง่ายๆ เลย นะครับ ปล. บทความนี้ เน้น Redis ทำงานบน Memory นะครับ ไม่ใช้ Dump Physical นะครับเน้นเร็วแต่ถ้า Restart Service ข้อมูลหายนะครับเพราะไม่ได้ Dump DB ลง Disk อันดับแรก ไปหาไฟล์ configuration ให้เจอครับ เหอะๆ ซึ่งปกติอยู่ใน /etc/redis/xxxxxxx ครับ ถ้าไม่รู้ให้ ไปแกะหาแถว /etc/init.d/redisxxxx ครับ
ของผมนี่ไฟล์ /etc/redis/6379.conf อยู่ path นี้เลย

1. TCP backlog = 511
Parameter นี้คือ Socket สูงสุดที่สามารถเชื่อมต่อมายัง Redis ได้ ซึ่งปริมาณนี้บน Production ไม่น่าจะพอเพียงให้ปรับตามใจชอบให้เหมาะกับ Sizing ของ Server คุณเองขนาดที่ผมแนะนำคือ 2500 เหมาะสำหรับ 1000-3000 Concurrent User แต่ค่านี้นั้นจะอิงกับ somaxconn ของ Linux ที่ไฟล์ /proc/sys/net/core/somaxconn แต่เราไม่สามารถไปแก้ไขไฟลนี้ตรงๆ ได้เพราะมันไม่ใช่ physical file ต้องใช้คำสั่ง sysctl โดยทำตามนี้ครับ

2. Disable dump file / maxmemory /
2.1 Disable DB File เพื่อความเร็วในการอ่านเขียนข้อมูลเพราะเราจะไม่ใช้ Disk เป็นตัวเก็บ key/value ของเราโดย ทำการ remark สามบรรทัดด้านล่างนี้

2.2 maxmemory xx(g) ในส่วนนี้ เราต้องหาขนาดที่เหมาะสมกับ Server เราเช่น เรามี Ram เหลือ จาก Service ปกติเราที่ 10g ก็ให้ใช้ 9g เหลือไว้ให้ตัว redis มันทำงานนิดหน่อยก็พอหรือจะลดกว่านี้ก็ได้ครับ

2.3 Policy ในการการ clear key เมือ Ram เต็ม ผมมักแนะนำให้ใช้ volatile-lru ครับตามคุำอธิบายเลย แต่เงื่อนไขว่าคุณต้องมี key ที่มีการ set ค่า expire เข้ามาเก็บนะครับ ตัวอย่างด้านล่างผมใช้ allkeys-lru เพราะข้อมูลของผมมันไม่สำคัญให้่มันสุ่ม clear ตาม algrithm LRU เลยง่ายดีไม่ต้องคิดมากครับ

3. overcommit_memory is set to 0 ถ้าดูใน /var/login/redisxxxx ของคุณถ้าพบข้อความนี้ให้แก้ด่วนเพราะจะทำให้ Cash ได้ เมื่อมีการใช้งาน memory สูงๆ เช่นเกือบมเต็มปริมาณของ Server โดยไปเพิ่ม ข้อความนี้
vm.overcommit_memory = 1 ที่ไฟล์ /etc/sysctl.conf

จากนั้นให้คุณรันคำสั่งนี้เพื่อให้มันทำงานทันที

4. Transparent Huge Pages (THP) support enabled in your kernel. ถ้าดูใน /var/login/redisxxxx ของคุณถ้าพบข้อความนี้ให้แก้ด่วนเพราะจะทำให้การอ่านข้อมูลของคุณช้าลงได้เพราะ THP ของคุณรองรับไฟล์ขนาดใหญ่เราก็แค่ปิด THP โดยสร้าง Text File ด้วยคำสั่งนี้เพื่อไม่ให้ THP ทำงาน

5. THP ต่อเนื่อง เพื่อให้มันทำงานไปตลอดเมื่อมีการ Restart Computer ก็ให้ไปแทรกที่ ไฟล์ /etc/rc.local

6. สุดท้ายถ้าคุณลบ logfile ของ redis จากนั้น Restart กลับมาดู log ของ redis ใหม่ซึ่งปกติจะอยู่ที่ /var/log/redis.logxxxxx จะต้องสวยงามแบบนี้ครับเป็นอันว่า Redis พร้อมสำหรับ Production แล้วครับ

ผลสรุป ไม่ว่าคุณจะ Config แบบไหนล้วนแล้วแต่ตามความต้องการของงานนั้นๆ อย่างที่ผมบอกไปว่านี่คือ Configuraion ของ Redis ที่ดีเร็ว แต่เหมาะสำหรับงานที่ไม่ได้มีความสำคัญเพราะว่าไม่ได้ใช้ Disk เก็บ Dump DB ดังนั้นสุดท้ายแล้วแต่ว่าคุณจะเลือกและปรับแต่งแบบไหน ให้เหมาะสมกับ Environment/Resource ที่คุณมีเจอกันใหม่บทความหน้าสวัสดีครับ

Written by adminwp