gpt4 book ai didi

caching - grails 2.4.2 ehcache 插件 1.0.5 过早地驱逐 key

转载 作者:行者123 更新时间:2023-12-02 14:40:00 28 4
gpt4 key购买 nike

使用 grails 2.4.2、cache:1.1.8 和 cache-ehcache:1.0.5,我发现缓存只包含一个条目。一旦添加了第二个条目,第一个条目就会消失。

配置

BuildConfig.groovy:

compile ":cache:1.1.8"
compile ":cache-ehcache:1.0.5"

配置.groovy:
grails.hibernate.cache.queries = true

grails {
cache {
order = 2000
enabled = true
clearAtStartup = true
shared = true
ehcache {
reloadable = false
}
}
}

grails.cache.clearAtStartup = true

grails.cache.config = {
cache {
name 'siteSettings'
}
provider {
updateCheck false
monitoring 'on'
dynamicConfig false
}
defaultCache {
maxElementsInMemory 10000
timeToIdleSeconds 600
timeToLiveSeconds 600
overflowToDisk false
diskPersistent false
memoryStoreEvictionPolicy 'LRU'
}
defaults {
maxElementsInMemory 10000
timeToIdleSeconds 600
timeToLiveSeconds 600
overflowToDisk false
diskPersistent false
memoryStoreEvictionPolicy 'LRU'
}
}

SettingsService.groovy 中的缓存方法:
@Cacheable(value='siteSettings')
public JSONElement getSiteSettings(Integer site){
log.info "NOT CACHED for this request (${site})"

日志输出

1)第一个请求站点=229(没有缓存):
    Initialised cache: siteSettings
CacheDecoratorFactory not configured for defaultCache. Skipping for 'siteSettings'.
siteSettings size: 0
cacheKeys: 0
NOT CACHED for this request (229)
put at siteSettings: [ key = grails.plugin.cache.CustomCacheKeyGenerator$CacheKey@490f0efa, value={"test":229}, version=1, hitCount=3, CreationTime = 1489534645017, LastAccessTime = 1489534976819 ]

2)第二个请求,其中站点=229(缓存保存229):
    siteSettings size: 1
cacheKeys: 1
key 229: [test:229]

3)第一个请求site=282(缓存保存229):
    siteSettings size: 1
cacheKeys: 1
key 229: [test:229]
NOT CACHED for this request (282)
evicted from siteSettings: [ key = grails.plugin.cache.CustomCacheKeyGenerator$CacheKey@490f0efa, value={"test":229}, version=1, hitCount=3, CreationTime = 1489534645017, LastAccessTime = 1489534976819 ]
put at siteSettings: [ key = grails.plugin.cache.CustomCacheKeyGenerator$CacheKey@492726a5, value={"test":282}, version=1, hitCount=0, CreationTime = 1489534976848, LastAccessTime = 1489534976848 ]

4) site=282 的第二个请求(缓存保存 282,而不是 229):
    siteSettings size: 1
cacheKeys: 1
key 282: [test:282]

5)第三个请求,其中站点 = 229(缓存保存 282,而不是 229):
    siteSettings size: 1
cacheKeys: 1
key 282: [test:282]
NOT CACHED for this request (229)
evicted from siteSettings: [ key = grails.plugin.cache.CustomCacheKeyGenerator$CacheKey@492726a5, value={"test":282}, version=1, hitCount=3, CreationTime = 1489534976848, LastAccessTime = 1489535172110 ]
put at siteSettings: [ key = grails.plugin.cache.CustomCacheKeyGenerator$CacheKey@490f0efa, value={"test":229}, version=1, hitCount=0, CreationTime = 1489535172193, LastAccessTime = 1489535172193 ]

分析
  • 在 site=229 的第一个请求中,没有缓存任何内容。正如预期
  • 在 site=229 的第二个请求中,以 229 为键的条目被缓存。正如预期
  • 在 site=282 的第一个请求中,以 229 为键的条目被缓存,但以 282 为键的条目未被缓存。正如预期
  • 在 site=282 的第二个请求中,以 282 为键的条目被缓存,但以 229 为键的条目不再被缓存。 UNEXPECTED - 期望两个键都被缓存。
  • 在 site=229 的第三个请求中,仍会缓存以 282 为键的条目,但以 229 键为键的条目不会被缓存。 UNEXPECTED - 期望两个键都被缓存(随后,282 被驱逐,而 229 被放置,这与观察到的行为匹配)

  • 我究竟做错了什么?谢谢你的帮助。

    最佳答案

    正如我所怀疑的那样,配置有问题。为了让 grails.plugin.cache.ConfigLoader 识别 Config.groovy 中的 grails.cache 声明是一个闭包,必须有一个等号 (=),如下所示:

    配置.groovy:

    // wrong
    grails {
    cache {
    order = 2000
    enabled = true
    clearAtStartup = true
    shared = true
    ehcache {
    reloadable = false
    }
    }
    }

    // right
    grails {
    cache = {
    order = 2000
    enabled = true
    clearAtStartup = true
    shared = true
    ehcache {
    reloadable = false
    }
    }
    }

    不幸的是,这没有反射(reflect)在 http://grails-plugins.github.io/grails-cache-ehcache/guide/usage.html 的文档中。 ,它显示了一个不带等号的配​​置元素示例。

    我在将 grails.plugin.cache 日志级别设置为“调试”后发现了这一点,当出现以下日志输出时:
    DEBUG ehcache.EhcacheConfigLoader  - Not including configs from Config.groovy

    检查 EhcacheConfigLoader 的源代码表明,当 cache.config 设置不是闭包时会出现此错误消息。在配置中添加等号使其成为一个闭包,并且来自 Config.groovy 的缓存配置现在已加载,这似乎解决了问题。

    关于caching - grails 2.4.2 ehcache 插件 1.0.5 过早地驱逐 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42772776/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com