返回缓存结果而不是转到数据库的方法

时间:2018-05-25 15:21:23

标签: java caching guava dropwizard google-guava-cache

我正在为我的get方法运行guava缓存。我注意到我的一个方法,它根据名称和部门从数据库中检索配置文件信息,仅从缓存中返回。如果条目不在缓存中,则应该转到DAO以从数据库中检索该配置文件。就我而言,它只是返回它放在缓存中的最后一个条目。

以下是我的缓存代码和使用它的管理器层方法:

private LoadingCache<Profile, List<Profile>> loadingCache = CacheBuilder.newBuilder()
            .refreshAfterWrite(5, TimeUnit.MINUTES)
            .expireAfterAccess(5, TimeUnit.MINUTES)
            .maximumSize(100).build(
                    new CacheLoader<Profile, List<Profile>>() {
                        @Override
                        public List<Profile> load(Profile profile) throws Exception {
                            System.out.println("Profile Parameters in LoadCache= " + profile);
                            return profileDAO.getProfileByFields(profile);
                        }
                    }
            );

public List<Profile> getProfileByFields(Profile profile) throws Exception {
        System.out.println("Profile Parameters in method= " + profile);
        return loadingCache.get(profile);
    }

这种方法的工作方式是在服务层上,使用路径参数中的配置文件名称和部门调用get方法:

@GET
@Path("{name}/{department}")
public List<Profile> getProfileByFieldsService(@PathParam("name") String name, @PathParam("department") String department) {
    Profile profile = new Profile();
    profile.setName(name);
    profile.setDepartment(department);
    //code to get data here.
}

这些参数传递给管理器,管理器应从缓存或DAO加载。我知道DAO服务的代码在没有缓存的情况下正常工作;正如预期的那样,用DAO替换return loadingCache.get(profile) return profileDAO.getProfileByFields(profile)次加载。此外,当我缩短缓存的到期时间(例如,到5毫秒)时,它会在到期后从DAO加载。此外,getProfileByFields中的System.out运行,显示参数传递给配置文件对象。但是,loadingCache中的System out不会运行,向我显示它永远不会到达。

0 个答案:

没有答案