2016-07-01 7 views
0

ich folgenden Frühjahr Cache Config haben:Strange Behaviour für Frühling Cache Guave TTL Config

spring.cache.guava.spec: expireAfterWrite=1s 

Dann habe ich zu testen:

@Test 
public void test_not_work() { 
    callCachedMethod(..); 
    sleep(2s); 
    callCachedMethod(..); 

    expect("real method called TWO times"); 
    // because cache should be expired after 1s 
    // It DOESN'T work, real method only called once 
} 

@Test 
public void test_works() { 
    callCachedMethod(..); 
    sleep(2s); 
    callCachedMethod(..); 
    sleep(2s); 
    callCachedMethod(..); 

    expect("real method called THREE times"); 
    // because cache should be expired after 1s 
    // IT WORKS!! 
} 

kann jemand erklären?

+1

Zum einen, sind Sie sicher Guava wird tatsächlich verwendet? Anstatt einen Test einzufügen, haben wir keine Chance zu laufen, bitte teilen Sie ein Projekt, das das Problem reproduziert. Das wird viel einfacher zu erklären, was vor sich geht. –

+0

bitte erklären Sie das Problem mehr, schreiben Sie nicht das Problem –

Antwort

0

Dies liegt daran, dass Guava die Vertreibung der Werte nicht automatisch sicherstellt, wenn der Zeitlimitwert abläuft.

Per seiner Dokumentation here:

Caches mit CacheBuilder gebaut keine Bereinigung durchführen und Werte zu vertreiben „automatisch“ oder sofort nach einem Wert abläuft, oder irgendetwas von die Art. Stattdessen führt es kleine Wartungsaufgaben während Schreiboperationen aus oder während gelegentlicher Lesevorgänge, wenn Schreibvorgänge selten sind.

+0

danke, es erklärt eine Menge, aber warum es mit 3 mal Aufruf der Cache-Methode funktioniert .. – Jaiwo99

+0

@ Jaiwo99 es passiert einfach so, wie Sie in diesem Fall erwartet . Du sollst dich nicht darauf verlassen. –

+0

OK, danke ... deshalb gibt es die Tests;) Wie auch immer ... du wirst den Kredit haben .. – Jaiwo99

Verwandte Themen