【发布时间】:2018-10-12 14:29:45
【问题描述】:
为了减少使用query 从数据库读取数据的数据库命中,我计划将结果保存在缓存中。为此,我使用了番石榴缓存。
studentController.java
public Map<String, Object> getSomeMethodName(Number departmentId, String departmentType){
ArrayList<Student> studentList = studentManager.getStudentListByDepartmentType(departmentId, departmentType);
----------
----------
}
StudentHibernateDao.java(条件查询)
@Override
public ArrayList<Student> getStudentListByDepartmentType(Number departmentId, String departmentType) {
Criteria criteria =sessionFactory.getCurrentSession().createCriteria(Student.class);
criteria.add(Restrictions.eq("departmentId", departmentId));
criteria.add(Restrictions.eq("departmentType", departmentType));
ArrayList<Student> studentList = (ArrayList)criteria.list();
return studentList;
}
为了缓存条件查询结果,我开始构建 CacheBuilder,如下所示。
private static LoadingCache<Number departmentId, String departmentType, ArrayList<Student>> studentListCache = CacheBuilder
.newBuilder().expireAfterAccess(1, TimeUnit.MINUTES)
.maximumSize(1000)
.build(new CacheLoader<Number departmentId, String departmentType, ArrayList<Student>>() {
public ArrayList<Student> load(String key) throws Exception {
return getStudentListByDepartmentType(departmentId, departmentType);
}
});
这里我不知道将CacheBuilder函数放在哪里以及如何将多个关键参数(即departmentId和departmentType)传递给CacheLoader并调用它。
这是使用guava 进行缓存的正确方法吗?我错过了什么吗?
【问题讨论】: