Использование кеша SpringBoot

Java

Один JSR107 (ниже будет конкретная демонстрация кода Springboot)

Java Caching определяет пять основных интерфейсов, а именно CachingProvider, CacheManager, Cache, Entry и Expiry.

  • 1 CachingProvider определяет создание, настройку, получение, управление и контроль нескольких CacheManager. Приложение может получить доступ к нескольким CachingProviders во время выполнения.

  • 2 CACHEANAGER Определяет создание, конфигурацию, приобретение, управление и управление несколькими однозначными названными кэшами, которые существуют в контексте Cachemanager. Cachemanager принадлежит только одному CachingProvider.

  • 3 Кэш представляет собой структуру данных, похожую на карту, и временно хранит значения, индексированные по ключу. Кэш принадлежит только одному CacheManager.

  • 4 Запись — это пара ключ-значение, хранящаяся в кэше.

  • 5 Срок действия Каждая запись, хранящаяся в кэше, имеет определенный срок действия. По истечении этого времени запись становится просроченной. По истечении этого срока запись будет недоступна, обновлена ​​и удалена. Срок действия кеша можно установить через ExpiryPolicy.

Как показано ниже:

Две абстракции кэша Spring (ниже будет показана конкретная демонстрация кода Springboot)

Упростите разработку с помощью аннотаций

  • 1 Интерфейс Cache определен для спецификации компонентов кэша, включая различные наборы операций кэша;

  • 2 Под интерфейсом Cache Spring предоставляет различные реализации xxxCache, такие как RedisCache, EhCacheCache, ConcurrentMapCache и т. д. Каждый раз, когда вызывается метод, требующий функции кэширования, Spring проверяет, был ли вызван указанный целевой метод указанного параметра; Получить результат вызова метода напрямую из кеша, если нет, то вызвать метод и закешировать результат и вернуть его пользователю. Получите его прямо из тайника в следующий раз.

  • 3 При использовании абстракции кэша Spring нам нужно обратить внимание на следующие два момента:

Первый момент — определить методы, которые нужно кэшировать, и стратегию их кэширования, а второй — прочитать ранее кэшированные данные из кэша.

Три кэш-аннотации

разное

  • @CAMEABLES может кэшировать результаты метода на основе его параметров запроса;

    cacheNames Имя кеша, то есть в кеше есть имя emp для идентификации различных компонентов кеша.

@Cacheable(cacheNames = {"emp"})
public Employee getEmpById(Integer id){
    System.out.println("查询" + id + "号员工");
    Employee employee = emploeeMapper.getEmpById(id);
    return  employee;
}
  • @CachePut синхронно обновляет кеш
//    @CachePut: 既调用方法,又更新缓存数据;同步更新缓存
//    修改了数据库的某个数据,同时更新缓存
//    运行:
//        1.先调用目标方法
//        2.将目标方法的结果缓存起来
    @CachePut(key = "#result.id")
    public Employee updateEmp(Employee employee){
        System.out.println("updateEmp "+employee);
        emploeeMapper.updateEmpById(employee);
        return  employee;
    }
  • @CacheEvict очистка кеша
//       @CacheEvict:缓存清除
//       key:指定要清除的数据
//       allEntries = true : 指定清除这个缓存中的所有数据
//       beforeInvocation=fales: 缓存的清除是否在方法之前执行
//       默认代表缓存清除操作是在方法执行之后执行;如果出现异常缓存就不会清除
//       beforeInvocation=true  代表清除缓存操作是在方法运行之前执行,无论方法是否出现异常,缓存都清除

   @CacheEvict(beforeInvocation = true)
   public void deleteEmp(Integer id){
         System.out.println("delteEmp: " + id);
         int i = 101/0;
         emploeeMapper.deleteEmpById(id);
   }

Здесь есть исключение, потому что есть int i = 101/0, поэтому это ненормально, но не влияет на результат.

Использование кеша SpringBoot и основной адрес:

blog.CSDN.net/QQ_38974634…