Учебники

Гуава — утилиты кэширования

Guava предоставляет очень мощный механизм кэширования на основе памяти с помощью интерфейса LoadingCache <K, V>. Значения автоматически загружаются в кеш, и он предоставляет множество вспомогательных методов, полезных для кеширования.

Декларация интерфейса

Ниже приводится объявление для интерфейса com.google.common.cache.LoadingCache <K, V>.

@Beta
@GwtCompatible
public interface LoadingCache<K,V>
   extends Cache<K,V>, Function<K,V>

Методы интерфейса

Sr.No Метод и описание
1

V применить (клавиша K)

Устаревшее. Предоставляется для удовлетворения функции интерфейса; используйте вместо этого get (K) или getUnchecked (K).

2

ConcurrentMap <K, V> asMap ()

Возвращает представление записей, хранящихся в этом кэше, в виде многопоточной карты.

3

V получить (K ключ)

Возвращает значение, связанное с ключом в этом кэше, сначала загружая это значение, если необходимо.

4

ImmutableMap <K, V> getAll (итерируемые <? Extends K> ключи)

Возвращает карту значений, связанных с ключами, создавая или получая эти значения при необходимости.

5

V getUnchecked (клавиша K)

Возвращает значение, связанное с ключом в этом кэше, сначала загружая это значение, если необходимо.

6

обновление пустоты (клавиша K)

Загружает новое значение для ключа, возможно, асинхронно.

V применить (клавиша K)

Устаревшее. Предоставляется для удовлетворения функции интерфейса; используйте вместо этого get (K) или getUnchecked (K).

ConcurrentMap <K, V> asMap ()

Возвращает представление записей, хранящихся в этом кэше, в виде многопоточной карты.

V получить (K ключ)

Возвращает значение, связанное с ключом в этом кэше, сначала загружая это значение, если необходимо.

ImmutableMap <K, V> getAll (итерируемые <? Extends K> ключи)

Возвращает карту значений, связанных с ключами, создавая или получая эти значения при необходимости.

V getUnchecked (клавиша K)

Возвращает значение, связанное с ключом в этом кэше, сначала загружая это значение, если необходимо.

обновление пустоты (клавиша K)

Загружает новое значение для ключа, возможно, асинхронно.

Пример LoadingCache

Создайте следующую Java-программу, используя любой редактор по вашему выбору, скажем, C: /> Guava.

GuavaTester.java

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import com.google.common.base.MoreObjects;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

public class GuavaTester {
   public static void main(String args[]) {
   
      //create a cache for employees based on their employee id
      LoadingCache<String, Employee> employeeCache = 
         CacheBuilder.newBuilder()
         .maximumSize(100)                             // maximum 100 records can be cached
         .expireAfterAccess(30, TimeUnit.MINUTES)      // cache will expire after 30 minutes of access
         .build(new CacheLoader<String, Employee>() {  // build the cacheloader
            
            @Override
            public Employee load(String empId) throws Exception {
               //make the expensive call
               return getFromDatabase(empId);
            } 
         });

      try {			
         //on first invocation, cache will be populated with corresponding
         //employee record
         System.out.println("Invocation #1");
         System.out.println(employeeCache.get("100"));
         System.out.println(employeeCache.get("103"));
         System.out.println(employeeCache.get("110"));
         
         //second invocation, data will be returned from cache
         System.out.println("Invocation #2");
         System.out.println(employeeCache.get("100"));
         System.out.println(employeeCache.get("103"));
         System.out.println(employeeCache.get("110"));

      } catch (ExecutionException e) {
         e.printStackTrace();
      }
   }

   private static Employee getFromDatabase(String empId) {
   
      Employee e1 = new Employee("Mahesh", "Finance", "100");
      Employee e2 = new Employee("Rohan", "IT", "103");
      Employee e3 = new Employee("Sohan", "Admin", "110");

      Map<String, Employee> database = new HashMap<String, Employee>();
      
      database.put("100", e1);
      database.put("103", e2);
      database.put("110", e3);
      
      System.out.println("Database hit for" + empId);
      
      return database.get(empId);		
   }
}

class Employee {
   String name;
   String dept;
   String emplD;

   public Employee(String name, String dept, String empID) {
      this.name = name;
      this.dept = dept;
      this.emplD = empID;
   }
   
   public String getName() {
      return name;
   }
   
   public void setName(String name) {
      this.name = name;
   }
   
   public String getDept() {
      return dept;
   }
   
   public void setDept(String dept) {
      this.dept = dept;
   }
   
   public String getEmplD() {
      return emplD;
   }
   
   public void setEmplD(String emplD) {
      this.emplD = emplD;
   }

   @Override
   public String toString() {
      return MoreObjects.toStringHelper(Employee.class)
      .add("Name", name)
      .add("Department", dept)
      .add("Emp Id", emplD).toString();
   }	
}

Проверьте результат

Скомпилируйте класс с помощью компилятора javac следующим образом:

C:\Guava>javac GuavaTester.java

Теперь запустите GuavaTester, чтобы увидеть результат.

C:\Guava>java GuavaTester

Смотрите результат.