วิธีแยกความแตกต่างระหว่างเวลาที่มีชีวิตและเวลาที่ไม่ได้ใช้งานใน ehcache


103

เอกสารเกี่ยวกับ ehache กล่าวว่า:

timeToIdleSeconds: Sets the time to idle for an element before it expires.
i.e. The maximum amount of time between accesses before an element expires

timeToLiveSeconds: Sets the time to live for an element before it expires.
i.e. The maximum time between creation time and when an element expires.

ฉันเข้าใจtimeToIdleSeconds

แต่หมายความว่าหลังจากการสร้างและการเข้าถึงรายการแคชครั้งแรกtimeToLiveSecondsจะใช้ไม่ได้อีกต่อไป?

คำตอบ:


156

timeToIdleSecondstimeToIdleSecondsช่วยให้วัตถุที่เก็บไว้ชั่วคราวจะถูกเก็บไว้ในตราบเท่าที่มันมีการร้องขอในระยะเวลาที่สั้นกว่า timeToLiveSecondsจะทำให้อ็อบเจ็กต์ที่แคชถูกยกเลิกหลังจากนั้นหลายวินาทีไม่ว่าจะมีการร้องขอกี่ครั้งหรือเมื่อใดก็ตาม

ว่าtimeToIdleSeconds = 3กันไป. จากนั้นวัตถุจะถูกยกเลิกหากไม่ได้รับการร้องขอเป็นเวลา 4 วินาที

หากtimeToLiveSeconds = 90วัตถุนั้นจะถูกลบออกจากแคชหลังจาก 90 วินาทีแม้ว่าจะได้รับการร้องขอไม่กี่มิลลิวินาทีใน 90 วินาทีของอายุการใช้งานสั้น


1
ดังนั้นฉันคิดว่าเราต้องการตั้งเวลาว่าง <ttl
Jacques René Mesrine

ในความคิดเห็นด้านบนเมื่อคุณพูดว่า "สมมติว่า timeToIdleSeconds = 3 Object จะไม่ถูกต้องหากไม่ได้รับการร้องขอเป็นเวลา 4 วินาที" เมื่อคุณพูดว่าไม่ถูกต้องหมายความว่าอย่างไร มันลบออกจากฮีปหรือไม่? หากอ็อบเจ็กต์ถูกลบออกจากแคชฉันก็จะสับสนว่าอะไรคือการใช้พารามิเตอร์ timeToLive เลย เมื่อเราทำ POC เราจะเห็นว่ามีการดึงข้อมูลจากแหล่งที่มาหลังจากเวลาผ่านไป แม้ว่าตารางเวลาจะเป็นค่าที่สูงกว่ามาก แต่ฉันก็คาดหวังว่ามันจะถูกดึงมาจากแคชเนื่องจากตารางเวลามีค่าสูงกว่า timeToIdle ในกรณีของเรา
Gayathri

3
@Gayathri หากคุณมีรายการข้อมูลที่เข้าถึงบ่อย (ทุกสองวินาที) แต่มี TTL หกสิบวินาที จะยังคงถูกดึงออกจากแหล่งที่มาทุกๆหกสิบวินาทีแม้ว่าจะมีการเข้าถึงอย่างต่อเนื่อง (ไม่ใช้งาน)
C. Ross

8
ตามความคิดเห็นแรก (โดย @ JacquesRenéMesrine) สำหรับกรณีที่ทั้ง TTL และ TTI ชุด (เช่นมากกว่าศูนย์): 1) TTI> = TTL: TTI มีไม่มีผลกระทบ ถือว่ารายการหมดอายุหลังจากcreationTime + TTL2) TTI <TTL: ถือว่ารายการหมดอายุหลังจากmin((max(lastAccessTime, creationTime) + TTI), (creationTime + TTL))
Timur Milovanov

"irregardless" -> "ไม่คำนึงถึง"
Magnus

41

หากคุณตั้งค่าทั้งสองอย่างexpirationTimeจะอยู่Math.min(ttlExpiry, ttiExpiry)ที่ไหน

ttlExpiry = creationTime + timeToLive
ttiExpiry = mostRecentTime + timeToIdle

รหัสที่มาเต็มได้ที่นี่


1
ตอนนี้พฤติกรรมที่เหมาะสมสำหรับฉัน ขอบคุณที่ชี้ประเด็นนี้โดยเฉพาะMath.minส่วนนี้
Prakash K

รหัสนี้ทำให้ชัดเจนกว่าคำอธิบายของมนุษย์ข้างต้น :-)
Maga Abdurakhmanov

22

จากเอกสาร 1.1 เก่า (มีอยู่ใน Google Cache ซึ่งง่ายต่อการเรียกดูและให้ข้อมูลมากกว่าเอกสาร AFAIK ปัจจุบัน):

timeToIdleSeconds

นี่เป็นแอตทริบิวต์ที่เป็นทางเลือก

ค่ากฎหมายคือจำนวนเต็มระหว่าง 0 ถึง Integer.MAX_VALUE

เป็นจำนวนวินาทีที่องค์ประกอบควรมีชีวิตอยู่นับตั้งแต่มีการใช้งานครั้งล่าสุด ใช้หมายถึงแทรกหรือเข้าถึง

0 มีความหมายพิเศษซึ่งไม่ใช่การตรวจสอบ Element สำหรับเวลาว่างคือมันจะไม่ได้ใช้งานตลอดไป

ค่าเริ่มต้นคือ 0

timeToLiveSeconds

นี่เป็นแอตทริบิวต์ที่เป็นทางเลือก

ค่ากฎหมายคือจำนวนเต็มระหว่าง 0 ถึง Integer.MAX_VALUE

เป็นจำนวนวินาทีที่องค์ประกอบควรมีชีวิตนับตั้งแต่สร้างขึ้น สร้างขึ้นหมายถึงแทรกลงในแคชโดยใช้วิธี Cache.put

0 มีความหมายพิเศษซึ่งไม่ใช่การตรวจสอบ Element สำหรับเวลาที่จะมีชีวิตกล่าวคือมันจะอยู่ตลอดไป

ค่าเริ่มต้นคือ 0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.