簡體   English   中英

Guice:如何緩存數據

[英]Guice: How can I cache data

我是Guice新手,並且對緩存有疑問。

我有一個WebApp,它使用提供程序來提供用戶配置。

bind(UserConfiguration.class).toProvider(UserConfigurationProvider.class).in(ServletScopes.REQUEST);

提供者聲明為:

public class UserConfigurationProvider implements Provider<UserConfiguration>{
    public UserConfiguration get() {
        userConfigurationDatabase.getUserConfiguration(<some param here>);
    }
}

在get方法中,它調用DB並進行非常昂貴的DB調用。

我有很多類可以注入UserConfiguration例如:

public class PriceView {
    private UserConfiguration userConfiguration;
    @Inject
    public MyClass(UserConguration userConfiguration){
        this.userConfiguration = userConfiguration;
    }

    .....
}

public class OrderView {
    private UserConfiguration userConfiguration;
    @Inject
    public MyClass(UserConguration userConfiguration){
        this.userConfiguration = userConfiguration;
    }
   ........
}

問題在於,每次切換視圖時,都會創建一個新的xxxxView對象,因此將注入新的UserConfiguration ,並因此調用昂貴的DB調用。

我想將每個用戶登錄的調用DB限制為一次。 我的想法是在用戶登錄時將UserConfiguration緩存在某個位置,並在用戶注銷或過期后清除它。

但是我想知道Guice提供了一些更聰明的緩存此用例的方法嗎?

非常感謝。

如果您使用的是標准Servlet會話,那么使用ServletScopes.SESSION范圍而不是ServletScopes.REQUEST應該足夠了。 在這種情況下,每個會話只能創建一次注入的對象。

但是,如果您沒有使用標准的servlet會話,而是自定義的,則還需要創建自定義的scope

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM