Стратегия кэширования Redis для MySql с Spring Cache

В настоящее время я использую Redis для следующих целей:

  1. Кэшировать веб-страницы.
  2. Кэшировать SQL-запрос, дающий один результат.

Например:

@Cacheable(value = "memberCache", key = "#username.concat('')")
public MemberModel findByUsername(String username) {
    return memMapper.findByUsername(username);
}

Но проблема в том, как кэшировать SQL-запрос, приводящий к нескольким результатам.

e.g.:

public List<MemberModel> findWhichAgeBiggerThan(int age) {
    return memMapper.ageBiggerThan(age);
}

Теперь результат оказывается List. Конечно, я могу кэшировать и этот результат, но если новый пользователь просто зарегистрируется в системе, результат этого запроса может измениться. Если это произойдет, кеш будет устаревшим. Как решать подобные проблемы?

Большое спасибо!


person Neo    schedule 15.06.2015    source источник


Ответы (1)


Вместо списка вы можете использовать Redis Hash:

Ваш метод будет таким:

public Map<String, MemberModel> findWhichAgeBiggerThan(int age) {
   // return map with key as String(may be user id) and actual MemberModel
}

Всю эту карту можно сохранить с помощью супер-ключа, скажем, «члены», а отдельные данные можно сохранить с помощью ключей «ученик1», «ученик2», как показано ниже.

hset members student1 MemberModel1 student2 MemberModel2

Чтобы добавить любые другие данные, просто используйте приведенную выше команду с такими конкретными данными, как

hset members student_new MemberModel_new

здесь участники будут добавлять/обновлять существующий ключ "nembers" новыми данными.

person Santosh Joshi    schedule 15.06.2015