Чтобы уменьшить количество обращений к БД для чтения данных из БД с использованием 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
.Я что-то упустил?