Ho provato la cache di guava di recente e sono rimasto sorpreso dalla politica di sfratto. Anche se la cache è chiaramente indicata come un lru nei documenti, ma non è de facto. Per me gli sfratti sembrano casuali come mostra il mio test. (il test è di aggiungere 100 etnie, ottenere 100 voci, potare 100 voci diverse, controllare l'ordine di sfratto) Non vorrei rilevare alcuni sfratti inaspettati in runtime. Potresti fornire qualche informazione sulla politica di sfratto per una cache di dimensioni limitate. Come posso forzare la rimozione della cache di guava come fa LHM?Politica di sfratto della cache di Guava
risposta
Le cache di guava sono segmentate in concurrencyLevel
tabelle hash diverse per consentire più letture e scritture simultanee. L'impostazione predefinita è concurrencyLevel
4. In sostanza, se il vostro maximumSize
è impostato su 100
, poi che in realtà solo i risultati in ognuno dei quattro segmenti ottenendo un maximumSize
di 25. Questo è il motivo per cui gli stati maximumSize
documentazione:
notare che il la cache può sfrattare una voce prima che questo limite venga superato. Man mano che la dimensione della cache si avvicina al massimo, la cache elude le voci che hanno meno probabilità di essere riutilizzate.
Quindi se per caso c'erano 30 voci inserite in un segmento particolare, 5 di queste voci verranno espulse.
L'unico modo per ottenere lo sfratto globale di cui è stato effettuato il minimo accesso per uno Cache
è disattivare completamente la concorrenza impostando concurrencyLevel(1)
. Anche in questo caso, la documentazione non produce nessuna garanzia sull'ordine di sfratto degli elementi e non si deve dipendere da esso.
- 1. Eliminazione della cache dalla cache L1 su sfratto L2
- 2. Come gestire le eccezioni di aggiornamento di Google Guava Cache?
- 3. Politica cache iOS
- 4. Cache di secondo livello di NHibernate - regioni di sfratto
- 5. Guava Ticker cache scadono
- 6. Combinazione Java guava di Multimap e Cache
- 7. Valori di precarica per una Guava Cache
- 8. Scarse prestazioni con Guava Cache su Android
- 9. benchmark guava cache vs ehcache
- 10. sfratto NHibernate da id
- 11. Progettazione di una cache di caricamento Guava con scadenza variabile
- 12. utilizzando la cache di guava senza una funzione di caricamento
- 13. Soppressione avvisi di sfratto SBT
- 14. Alamofire caricamento dalla cache anche quando la politica della cache è impostata su ReloadIgnoringLocalAndRemoteCacheData
- 15. Guava cache e conservazione delle eccezioni controllate
- 16. Come inserire valori() nella classe cache di Guava?
- 17. argomenti della funzione Guava
- 18. file di politica jar
- 19. inizializzazione di Guava ImmutableMap
- 20. Eliminazione di un'istanza classe tipo e politica della versione pacchetto
- 21. Guava Sets.intersection prestazione errata
- 22. XMLHttpRequest Stessa politica di origine
- 23. Iniettando il generatore di cache guava di Google in bean tramite Spring
- 24. ordinamento lessicografico della lista di stringhe usando guava
- 25. Versione guava durante l'utilizzo della shell di accensione
- 26. La cache di Guava <K, Semaphore> with weakValues () potrebbe essere thread safe?
- 27. Disattivazione della politica della stessa origine in Safari
- 28. Strana implementazione di Guava LongMath.checkedAdd
- 29. Utilizzo di Guava con GWT
- 30. Ordinamento di un Guava BiMap
Grazie per la risposta Louis. Per me non è chiaro come trattare questa dichiarazione della documentazione. Quindi, meno concurrencyLevel = più LRU. Ma mi sono ancora confuso con lo sfratto a livello di segmento. ho ragione se un segmento diventa pieno diciamo> 25 (100/4) nel mio caso, lo sfratto inizierà? o sfrutterà solo a ~ maxSize ma sfrutterà un segmento lru entry di livello? –
Se un segmento supera 25 voci, sfrutta la voce meno recente _ in quel segmento._ –
(in sostanza, ogni segmento opera in modo più o meno completamente indipendente, in modo che possano essere utilizzati contemporaneamente senza bloccarsi.) –