คุณได้รับคำตอบสำหรับคำถามแรกของคุณแล้ว: เจตนาของADDการทำงานเฉพาะเมื่อไม่มีคีย์อยู่ในขณะSETนั้นเพื่ออัพเดตค่าโดยไม่คำนึงว่ามีอยู่จริงหรือไม่ ถ้าคุณคุ้นเคยกับ SQL มันก็เหมือนกับความแตกต่างระหว่างINSERTข้อความค้นหา ( ADD) และUPDATE( SET)
ในส่วนที่เกี่ยวกับคำถามเพิ่มเติมของคุณคุณจะใช้แบบใดก็ตามที่เหมาะสมกับวัตถุประสงค์ของคุณ ฉันจะบอกว่าSETมันเป็นการดำเนินการทั่วไปมากขึ้นเพราะมันเป็นเรื่องธรรมดามากกว่าที่คุณเพียงแค่ต้องการพูดว่า "ฉันต้องการกุญแจfooเพื่อให้มีค่าbarและฉันไม่สนใจว่ามันจะอยู่ในนั้นหรือไม่" อย่างไรก็ตามจะมีโอกาส (บ่อยครั้ง) เมื่อจำเป็นต้องทราบว่ารหัสไม่ได้อยู่ในแคชแล้ว
ตัวอย่างที่ควรคำนึงถึงเมื่อADDเหมาะสมคือการจัดเก็บเซสชันใน memcache (ซึ่งฉันไม่แนะนำ) ซึ่งหากคุณกำลังสร้าง ID เซสชันของคุณแบบสุ่ม (หรือผ่านการแฮช) คุณไม่ต้องการ เพื่อสร้างเซสชันใหม่ด้วยคีย์เดียวกับที่มีอยู่ซึ่งจะทำให้ผู้ใช้รายหนึ่งสามารถเข้าถึงข้อมูลของผู้ใช้รายอื่นได้ ในกรณีนี้เมื่อคุณสร้างเซสชั่นที่คุณจะใช้ADDและหากมันกลับสถานะความล้มเหลวคุณจะต้องสร้าง ID เซสชั่นใหม่และลองอีกครั้ง แน่นอนว่าการอัปเดตเซสชันจะใช้SETเมื่อผู้ใช้ทำงานผ่านแอปพลิเคชันของคุณ