Статья опубликована в рамках: LXVI Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 14 июня 2018 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
КЭШИРОВАНИЕ ОБЪЕКТОВ В JAVA
Аннотация. Данная статья посвящена кэшированию объектов в java, которое позволяет увеличить производительность приложения.
Ключевые слова: java, кэширование, технология, производительность.
Сокращения:
LRU – Least Recently Used;
JCS – Java Caching System.
Кэширование является одним из важнейших аспектов, подлежащий рассмотрению, при разработке современных приложений. Наиболее частая роль кэширования – повысить производительность приложения или какого-либо конкретного модуля. Под понятием кэш подразумевается совокупность объектов, сохраненных в памяти. Он содержит объекты, состояние которых не меняется, с ключами и уникальными идентификаторами. Наиболее распространенным хранилищем в системах кэширования является оперативная память. Но системы кэширования также могут хранить элементы на диске, базе данных или в любом другом постоянном хранилище. Java Caching System (JCS) – это распределенная структура кэширования, разработанная на java. Она улучшает производительность приложений, предоставляя поддержку для управления различными динамическими кэшируемыми данными. JCS поддерживает хранение данных в памяти и на дисках. Структура JCS полностью настраивается через файл свойств и обеспечивает большую гибкость в управлении кэшем.
В большинстве веб-приложений данные хранятся в базе данных. Получение объектов из базы данных является дорогостоящей операцией и требует много времени. Если веб-приложение часто обращается к базе данных для каждого запроса, то его производительность будет медленной. В результате многие веб-приложения используют различные методы проектирования для сокращения времени ожидания и увеличения объема хранимых данных в базе.
Ниже перечислены некоторые из основных особенностей Java Caching System [1]:
– управление памятью;
– контроль потоков;
– расширяемая структура;
– конфигурируемые параметры времени выполнения;
– поиск на основе ключей;
– распределенный составной кэш;
– обработка событий.
Основа Java Caching System построена на составном кэше. В JCS доступно 4 вида кэшей. Любой тип кэша может быть подключен через конфигурируемый файл. Ниже перечислены типы [2]:
– Кэш памяти (LRU) – это широко используемый основной механизм кэширования. Кэш памяти очень быстрый. Он использует алгоритм Least Recent Used (LRU) для управления объектами, хранящимися в памяти.
– Кэш диска – кэш диска используется для хранения данных, когда кэш памяти заполнен;
– jdbc кэш диска – это еще один тип кэша диска. Основным хранилищем является JDBC- совместимая база данных;
– tcp lateral кэш – это механизм для распределения кэшированных данных на нескольких распределенных серверах.
Работа с JCS:
Ниже приведен простой класс Employee, содержащий сведения о сотрудниках. Класс должен реализовывать интерфейс Serializable, поскольку его данные будут сохранены. Класс содержит методы getter/setter для чтения и записи данных.
public class Employee implements java.io.Serializable{
private String name;
private String address;
private String empid;
public Employee(String name, String address, String empid) {
this.name = name;
this.address = address;
this.empid = empid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmpid() {
return empid;
}
public void setEmpid(String empid) {
this.empid = empid;
}
}
Листинг 1. Пример класса Employee
Ниже приведен основной класс EmployeeManager, который импортирует пакеты JCS для использования API-интерфейсов. Он использует область кэша, выраженную переменной empCache, для размещения и получения данных в памяти. Данные хранятся в памяти в виде пары ключ-значение. Поиск основан на ключе, связанном с каждым значением. Пример показывает добавление, извлечение и удаление объектов, хранящихся в кэше.
import org.apache.jcs.JCS;
import org.apache.jcs.access.exception.CacheException;
public class EmployeeManager {
private JCS cache;
public EmployeeManager()
{
try
{
// Load the cache
cache = JCS.getInstance( "empCache" );
// Initialize the cache, Here data can be loaded during initialization
cache.put( "123", new Employee( "Nick", "Detroit.USA", "123" ) );
cache.put( "143", new Employee( "Ric", "Seattle.USA", "143" ) );
cache.put( "153", new Employee( "Jhon", "Chicago.USA", "153" ) );
cache.put( "163", new Employee( "Dan", "Houston.USA", "163" ) );
}
catch( CacheException e )
{
e.printStackTrace();
}
}
public void addEmployee( Employee emp )
{
try
{
cache.put( emp.getEmpid(), emp );
}
catch( CacheException e )
{
e.printStackTrace();
}
}
public Employee getEmployee( String empid )
{
return ( Employee )cache.get( empid );
}
public void removeEmployee( String empid )
{
try
{
cache.remove( empid );
}
catch( CacheException e )
{
e.printStackTrace();
}
}
public static void main( String[] args )
{
// Create the employee manager
EmployeeManager empManager = new EmployeeManager();
// Add employees to the employee manager
/*empManager.addEmployee(new Employee("Name1", "address1", "empid1"));
empManager.addEmployee(new Employee("Name2", "address2", "empid2"));
empManager.addEmployee(new Employee("Name3", "address3", "empid3"));*/
// Get employee
Employee emp = empManager.getEmployee("123");
System.out.println( "Employee details retrieved from cache: " + emp.getName()+"-"+emp.getAddress());
// Remove employee
empManager.removeEmployee("123");
// After removal of employee
System.out.println( "Employee details after removal from cache: " + empManager.getEmployee("123") );
}
}
Листинг 2. Пример класса EmployeeManager
Список литературы:
- Брайан Гоец. Java concurrency in practice, 2006. –234 с.
- Java Platform, Enterprise Edition (Java EE) 8 – [Электронный ресурс]. – Режим доступа. – URL: https://javaee.github.io/tutorial/toc.html
дипломов
Оставить комментарий