2012-09-13 25 views
5

Bất kỳ ai cũng có thể xác nhận nếu cài đặt TTL, ví dụ: timeToLiveSeconds có thể được thiết lập bằng cách sử dụng plugin cache grails với phần mở rộng ehcache?Plugin plugin cache-ehcache và giá trị TTL

Tài liệu cho plugin cơ sở nêu rõ rằng TTL không được hỗ trợ, nhưng phần mở rộng ehcache đề cập đến các giá trị này. Cho đến nay tôi đã không đặt thành công giá trị TTL cho bộ nhớ cache của mình:

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

@Cacheable('messages') 
def getMessages() 

Tuy nhiên, thư vẫn được lưu trong bộ nhớ cache vô thời hạn. Tôi có thể tự xóa bộ nhớ cache bằng cách sử dụng chú thích @CacheEvict nhưng tôi hy vọng rằng TTL sẽ được hỗ trợ khi sử dụng phần mở rộng ehcache.

Cảm ơn

+0

câu hỏi này đã được hỏi một thời gian dài trước đây nhưng thấy https://jira.grails.org/browse/GPCACHEEHCACHE-6 –

+0

@Khi liên kết đó bị hỏng ngay bây giờ – GreenGiant

Trả lời

6

Có, plugin cache-ehcache chắc chắn hỗ trợ TTL và tất cả các thuộc tính cấu hình bộ nhớ cache được hỗ trợ bởi EhCache. Như đã nêu trong tài liệu, plugin bộ đệm cơ sở thực hiện bộ nhớ cache trong bộ nhớ đơn giản không hỗ trợ TTL, nhưng Cache DSL sẽ chuyển qua bất kỳ cài đặt cấu hình không xác định nào cho nhà cung cấp bộ đệm ẩn.

Bạn có thể cấu hình các thiết lập ehcache bằng cách thêm dòng sau vào Config.groovy hoặc 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 
    } 
} 

Bạn có thể xác minh các thiết lập bộ nhớ cache trong thời gian chạy như sau:

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

Xem EhCache javadoc for CacheConfiguration cho người khác thuộc tính bộ nhớ cache. Bạn cũng có thể bật ghi nhật ký gỡ lỗi chi tiết về bộ đệm ẩn bằng cách ghi lại grails.plugin.cachenet.sf.ehcache.

Lưu ý rằng các plugin bộ nhớ đệm của Grails thực hiện trình quản lý bộ nhớ cache của riêng chúng, khác biệt và tách biệt với trình quản lý bộ nhớ cache EhCache gốc. Nếu bạn đã cấu hình trực tiếp EhCache (bằng cách sử dụng ehcache.xml hoặc các phương tiện khác) thì các cache này sẽ chạy riêng biệt với các cache được quản lý bởi plugin Grails.

Lưu ý: Đã có lỗi trong các phiên bản cũ của plugin Cache-EhCache trong đó cài đặt TTL không được đặt chính xác và các đối tượng đã hết hạn sau một năm; điều này đã được sửa trong Grails-Cache-Ehcache 1.1.

0

Thuộc tính TTL được hỗ trợ với plugin lõi ehcache. Bạn cài đặt plugin như thế nào? Đối với dự án của tôi, tôi chỉ có:

compile ":cache-ehcache:1.0.0" 

trong BuildConfig.groovy trong phần đóng plugin. Vì plugin này có sự phụ thuộc vào plugin bộ nhớ cache cốt lõi của grails, bạn không cần phải khai báo nó.

0

Tôi có thể giải quyết vấn đề này ghi đè cấu hình lúc khởi động với tập lệnh grails-app/conf/BootStrap.groovy.

Ví dụ, đây là kịch bản để ghi đè lên thời gian mặc định để sống để 60 giây của một bộ nhớ cache có tên là "mycache":

class BootStrap { 

    def grailsCacheManager 

    def init = { servletContext -> 
     grailsCacheManager.getCache("mycache").nativeCache 
         .cacheConfiguration.timeToLiveSeconds = 60 
    } 
    def destroy = { 
    } 
}