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
Смотрите результат.