spring 咖啡因缓存日志

r6hnlfcb  于 2024-01-05  发布在  Spring
关注(0)|答案(1)|浏览(133)

我正在使用带有spring注解的caffeine缓存提供程序,当条目被放入缓存或被驱逐或缓存上发生的任何活动时,我无法看到caffeinecachemanager的日志。我是否必须明确提及启用或禁用caffeine日志的属性?
有没有人可以帮助下面?如何记录一个消息时,@cachable填充该高速缓存?如何记录时,一个缓存条目从缓存逐出?有没有什么办法我可以检查所有的缓存条目存储与缓存名称?是否AOP配置时,需要使用Spring注解和CaffeineCacheManager。?如果是这样,请帮助与示例。

j13ufse2

j13ufse21#

理想的情况是使用方面,但我不想深入研究,因为它只是为了调试以理解实际的底层行为。
所以我做了下面的,使用Kotlin,但你可以适应你的需要。
首先,创建一个delegator类:

  1. class DelegatingCache<K, V>(
  2. val name: String,
  3. private val delegate: Cache<K, V>
  4. ) : Cache<K, V> {
  5. private val logger = LoggerFactory.getLogger(javaClass)
  6. override fun getIfPresent(key: K): V? = delegate.getIfPresent(key)
  7. .also { logger.warn("$name getIfPresent(key=$key) = $it") }
  8. override fun get(key: K, mappingFunction: Function<in K, out @PolyNull V>?): @PolyNull V =
  9. delegate.get(key, mappingFunction)
  10. .also { logger.warn("$name get(key=$key) = $it") }
  11. override fun getAllPresent(keys: Iterable<K>): Map<K, V> = delegate.getAllPresent(keys)
  12. .also { logger.warn("$name getAllPresent") }
  13. override fun getAll(
  14. keys: MutableIterable<K>?,
  15. mappingFunction: Function<in MutableSet<out K>, out MutableMap<out K, out V>>?
  16. ): MutableMap<K, V>? = delegate.getAll(keys, mappingFunction)
  17. .also { logger.warn("$name getAll") }
  18. override fun put(key: K, value: V) = delegate.put(key, value)
  19. .also { logger.warn("$name put(key=$key, value=$value)") }
  20. override fun putAll(map: Map<out K, V>) = delegate.putAll(map)
  21. .also { logger.warn("$name putAll") }
  22. override fun invalidate(key: K) = delegate.invalidate(key)
  23. .also { logger.warn("$name invalidate(key=$key)") }
  24. override fun invalidateAll(keys: Iterable<K>) = delegate.invalidateAll(keys)
  25. .also { logger.warn("$name invalidateAll(keys: Iterable<K>)") }
  26. override fun invalidateAll() = delegate.invalidateAll()
  27. .also { logger.warn("$name invalidateAll") }
  28. override fun estimatedSize(): Long = delegate.estimatedSize()
  29. .also { logger.warn("$name estimatedSize = $it") }
  30. override fun stats(): CacheStats = delegate.stats()
  31. .also { logger.warn("$name stats = $it") }
  32. override fun asMap(): ConcurrentMap<K, V> = delegate.asMap()
  33. .also { logger.warn("$name asMap") }
  34. override fun cleanUp() = delegate.cleanUp()
  35. .also { logger.warn("$name cleanUp") }
  36. override fun policy(): Policy<K, V> = delegate.policy()
  37. .also { logger.warn("$name policy = $it") }
  38. }

字符串
然后,当您在@Configuration类上构建Cache示例时,只需在返回之前将该高速缓存 Package 在此委托程序类中。

  1. private fun <K, V> buildCache(
  2. cacheName: String,
  3. ): Cache<K, V> {
  4. return Caffeine.newBuilder()
  5. // ...
  6. .build<K, V>()
  7. .let { DelegatingCache(cacheName, it) }
  8. }


欢呼

展开查看全部

相关问题