5

誰かがTTL設定(timeToLiveSecondsなど)がehcache拡張機能を備えたgrailsキャッシュプラグインを使用して設定できるかどうかを確認できますか?

ベースプラグインのドキュメントには、TTLはサポートされていないと明示的に記載されていますが、ehcache拡張機能にはこれらの値が記載されています。これまでのところ、キャッシュにTTL値を設定することに成功していません。

grails.cache.config = {
    cache {
        name 'messages'
        maxElementsInMemory 1000
        eternal false
        timeToLiveSeconds 120
        overflowToDisk false
        memoryStoreEvictionPolicy 'LRU'
    }
}

@Cacheable('messages')
def getMessages()

ただし、メッセージは無期限にキャッシュされたままになります。@CacheEvictアノテーションを使用して手動でキャッシュをフラッシュできますが、ehcache拡張機能を使用するときにTTLがサポートされることを期待していました。

ありがとう

4

3 に答える 3

5

はい、cache-ehcacheプラグインはTTLと、EhCacheでネイティブにサポートされているすべてのキャッシュ構成プロパティを確実にサポートしています。ドキュメントに記載されているように、ベースキャッシュプラグインはTTLをサポートしない単純なメモリ内キャッシュを実装しますが、キャッシュDSLは不明な構成設定を基になるキャッシュプロバイダーに渡します。

Config.groovyまたはに以下を追加することで、EhCache設定を構成できますCacheConfig.groovy

grails.cache.config = {
    cache {
        name 'mycache'
    }

    //this is not a cache, it's a set of default configs to apply to other caches
    defaults {
        eternal false
        overflowToDisk true
        maxElementsInMemory 10000
        maxElementsOnDisk 10000000
        timeToLiveSeconds 300
        timeToIdleSeconds 0
    }
}

次のように、実行時にキャッシュ設定を確認できます。

grailsCacheManager.cacheNames.each { 
   def config = grailsCacheManager.getCache(it).nativeCache.cacheConfiguration
   println "timeToLiveSeconds: ${config.timeToLiveSeconds}"
   println "timeToIdleSeconds: ${config.timeToIdleSeconds}"
}

その他のキャッシュプロパティについては、CacheConfigurationのEhCachejavadocを参照してください。grails.plugin.cacheロギングとを使用して、キャッシュの詳細なデバッグロギングを有効にすることもできますnet.sf.ehcache

Grailsキャッシングプラグインは、ネイティブのEhCacheキャッシュマネージャーとは異なり、別個の独自のキャッシュマネージャーを実装していることに注意してください。EhCacheを直接(ehcache.xmlまたは他の手段を使用して)構成した場合、これらのキャッシュはGrailsプラグインによって管理されるキャッシュとは別に実行されます。

注:古いバージョンのCache-EhCacheプラグインには、TTL設定が正しく設定されておらず、オブジェクトが1年で期限切れになるというバグが実際にありました。これはGrails-Cache-Ehcache1.1で修正されました。

于 2013-01-17T21:04:07.860 に答える
0

TTLプロパティは、ehcacheコアプラグインでサポートされています。プラグインをどのようにインストールしますか?私のプロジェクトでは、次のものしかありません。

compile ":cache-ehcache:1.0.0"

プラグインクロージャのBuildConfig.groovyにあります。このプラグインはコアgrailsキャッシュプラグインに依存しているため、宣言する必要はありません。

于 2012-11-13T19:36:40.327 に答える
0

この問題は、起動時にgrails-app/conf/BootStrap.groovyスクリプトを使用して構成を上書きすることで解決できました。

たとえば、これは「mycache」という名前のキャッシュのデフォルトの存続時間を60秒に上書きするスクリプトです。

class BootStrap {

    def grailsCacheManager

    def init = { servletContext ->
        grailsCacheManager.getCache("mycache").nativeCache
                        .cacheConfiguration.timeToLiveSeconds = 60
    }
    def destroy = {
    }
}
于 2015-10-21T16:05:40.537 に答える