Saya mencoba @Cacheable
dukungan anotasi untuk Spring 3.1 dan bertanya-tanya apakah ada cara untuk membuat data cache dihapus setelah beberapa saat dengan menyetel TTL? Sekarang dari apa yang dapat saya lihat, saya perlu membersihkannya sendiri dengan menggunakan @CacheEvict
, dan dengan menggunakannya bersama-sama, @Scheduled
saya dapat membuat implementasi TTL sendiri tetapi tampaknya agak berlebihan untuk tugas yang begitu sederhana?
102
Berikut adalah contoh lengkap menyiapkan Guava Cache di Spring. Saya menggunakan Guava daripada Ehcache karena bobotnya sedikit lebih ringan dan konfigurasinya tampak lebih mudah bagi saya.
Impor Dependensi Maven
Tambahkan dependensi ini ke file pom maven Anda dan jalankan clean and packages. File ini adalah metode pembantu Guava dep dan Spring untuk digunakan di CacheBuilder.
Konfigurasikan Cache
Anda perlu membuat file CacheConfig untuk mengkonfigurasi cache menggunakan konfigurasi Java.
Beri anotasi metode yang akan disimpan dalam cache
Tambahkan anotasi @Cacheable dan teruskan nama cache.
Anda dapat melihat contoh yang lebih lengkap di sini dengan screenshot beranotasi: Guava Cache in Spring
sumber
Saya menggunakan peretasan hidup seperti ini
sumber
reportCacheEvict
metode dari mana saja. Bagaimana cacheEvict terjadi ??Springboot 1.3.8
dan
sumber
ini bisa dilakukan dengan memperluas org.springframework.cache.interceptor.CacheInterceptor, dan menimpa metode "doPut" - org.springframework.cache.interceptor.AbstractCacheInvoker logika penggantian Anda harus menggunakan metode penyedia cache put yang tahu untuk menyetel TTL untuk entri cache (dalam kasus saya, saya menggunakan HazelcastCacheManager)
pada konfigurasi cache Anda, Anda perlu menambahkan 2 metode kacang tersebut, membuat instance interseptor kustom Anda.
Solusi ini bagus saat Anda ingin menyetel TTL pada level entri, dan bukan secara global pada level cache
sumber
Sejak Spring-boot 1.3.3, Anda dapat menyetel waktu kedaluwarsa di CacheManager dengan menggunakan RedisCacheManager.setExpires atau RedisCacheManager.setDefaultExpiration dalam kacang panggilan balik CacheManagerCustomizer .
sumber
Saat menggunakan Redis, TTL dapat diatur di file properti seperti ini:
spring.cache.redis.time-to-live=1d # 1 day
spring.cache.redis.time-to-live=5m # 5 minutes
spring.cache.redis.time-to-live=10s # 10 seconds
sumber
Jika Anda bekerja dengan redis dan Java 8, Anda dapat melihat JetCache :
@Cached(expire = 10, timeUnit = TimeUnit.MINUTES) User getUserById(long userId);
sumber