Я использую RedisTemplate, предоставляемый Spring framework для кэширования в памяти. И MySql в качестве первичной базы данных. Мне нужно обновлять кеш всякий раз, когда новая строка добавляется или обновляется в первичной базе данных. Как я могу сделать это с помощью Java? Есть ли встроенная функция, предоставляемая сервером Redis для этого?
Обновлять:
@Override public void getEmployeeDetailsForRedisTemplate(List<Employee> employee) {
logger.info("Saving " + employee.size() + " record to redis template");
for (Employee emp : employee) {
listOperations.leftPush(EnumConstants.EMPLOYEE_KEY.getValue(), emp);
}
}
Я регулярно опрашивал базу данных и на основе столбца состояния в БД я отправлял обновленные данные на сервер redis. Это неэффективный способ сделать это
@Override public void getEmployeeDetailsForRedisTemplate(List<Employee> employee) { logger.info("Saving " + employee.size() + " record to redis template"); for (Employee emp : employee) { listOperations.leftPush(EnumConstants.EMPLOYEE_KEY.getValue(), emp); } } Я регулярно опрашивал базу данных и на основе столбца статуса в БД я отправлял обновленные данные на сервер Redis. Это неэффективный способ сделать это
Я поместил ваш код в вопрос для лучшего понимания.




Извините, я хотел спросить, есть ли фрагмент кода Java-кода, который вызывается при добавлении / обновлении новой строки, но я новичок, поэтому не могу комментировать
Если вы используете Redis в качестве кеша, вы можете использовать аннотацию @Cacheable, предоставляемую Spring-Data-Redis, настроив RedisCacheManager в вашей конфигурации.
@Cacheable - Annotation indicating that the result of invoking a method (or all methods in a class) can be cached. Each time an advised method is invoked, caching behavior will be applied, checking whether the method has been already invoked for the given arguments. A sensible default simply uses the method parameters to compute the key, but a SpEL expression can be provided via the key() attribute, or a custom KeyGenerator implementation can replace the default one (see keyGenerator()).
If no value is found in the cache for the computed key, the target method will be invoked and the returned value stored in the associated cache. Note that Java8's Optional return types are automatically handled and its content is stored in the cache if present.
Таким образом, вы могли бы использовать его как
@Override
@Cacheable(value = "cacheName", key = "#employee.id")
public void getEmployeeDetailsForRedisTemplate(List<Employee> employee) {
logger.info("Saving " + employee.size() + " record to redis template");
for (Employee emp : employee) {
listOperations.leftPush(EnumConstants.EMPLOYEE_KEY.getValue(), emp);
}
}
Надеюсь это поможет
что ты уже испробовал? Можете ли вы опубликовать какой-нибудь фрагмент кода, который вы пробовали? даже если он не удался.