ฉันมีชุดสคริปต์ PHP 7.4 ที่รันด้วยส่วนขยาย APCu ซึ่งโค้ดใช้เป็นที่เก็บวัตถุทั่วไปสำหรับผู้ใช้ทุกคนที่เยี่ยมชมเว็บไซต์ที่โฮสต์เดียว เนื่องจากความไม่เข้าใจของฉันเอง ฉันจึงพบในภายหลังว่ามีการสร้างแคช APCU ต่อกระบวนการ PHP. สิ่งที่ฉันเห็นคือในบางกรณี ผู้ใช้ 'ก' ได้รับค่าแคชที่แตกต่างจาก ผู้ใช้ 'b' (สันนิษฐานว่าเนื่องจาก PHP-FPM ได้แยกกระบวนการใหม่สำหรับผู้ใช้ 'b')
แต่ก็ยังไม่ชัดเจนสำหรับฉันว่าจะตั้งค่า php-fpm อย่างไร เพื่อให้คำขอที่เข้ามาทั้งหมดจะอยู่ในกระบวนการย่อยที่มาจากกระบวนการหลักเดียวกัน
APCu กูรู คราโจ กล่าวนี้ ย้อนกลับไปในปี 2558 (ฉันเน้นด้วยตัวหนา):
เพียงตอบคำถามเดิม ... ตามที่ @ fruitl00p พูดคุณทำได้
กำหนดวิธีการของคุณออกจากปัญหาที่ไม่สามารถแบ่งปันได้
คุณกำลังใช้ fpm
มีความแตกต่างระหว่างการใช้ fpm และการใช้ fcgi ฉันควรทำ
อาจใส่ PR ไปที่ phptherightway เพื่อล้างข้อมูล
กฎคือเฉพาะกระบวนการลูกเท่านั้นที่สามารถเข้าถึงสิ่งที่พาเรนต์ได้
สร้าง; ในกระบวนการเกิดของ FCGI ไม่จำเป็นต้องเป็นลูกของ
พ่อแม่ของพวกเขาอาจไม่ใช่ส้อมที่แท้จริง หากผู้จัดการกระบวนการของคุณ
ทำงานเหมือนกับ FCGI/CGI ทั่วไป คุณจะไม่สามารถแชร์ได้
ถ้ามันทำงานเหมือน FPM และเริ่มต้น PHP ในพาเรนต์และแยกลูก
ล่ามแล้วคุณจะไม่มีปัญหา
การวิจัยเพิ่มเติมทำให้ฉันไปที่ไฟล์ php-fpm www.conf และการตั้งค่าสำหรับ:
pm = ไดนามิก
pm.max_children = 50
ดังนั้น - มันง่ายเหมือนการเปลี่ยนสิ่งนี้เป็น:
pm = คงที่
pm.max_children = 50
เช่น นี่เป็นวิธีบังคับ php-fpm เพื่อให้แน่ใจว่ากระบวนการลูกทั้งหมดชี้กลับไปที่พาเรนต์เดียวหรือไม่ ดังนั้นจึงมั่นใจได้ว่ามีแคช APCu ทั่วโลกเพียงอันเดียวในการเล่น? ฉันรู้ว่าฉันต้องทำคณิตศาสตร์เพื่อหาค่า pm.max_children ที่ถูกต้อง
โปรดทราบ: ฉันไม่สามารถเปลี่ยนไปใช้ memcached ได้ในตอนนี้ เนื่องจากฉันใช้การวนซ้ำ regex บนคีย์ APCu ผ่านวัตถุ APCUIterator ฉันอาจไปถึงที่นั่นได้ในที่สุด แต่ ณ ตอนนี้ฉันต้องยึดติดกับ APCu