Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: LXVI Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 14 июня 2018 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Кот А.А., Зяблов Д.В. КЭШИРОВАНИЕ ОБЪЕКТОВ В JAVA // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. LXVI междунар. студ. науч.-практ. конф. № 6(65). URL: https://sibac.info/archive/technic/6(65).pdf (дата обращения: 26.11.2024)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

КЭШИРОВАНИЕ ОБЪЕКТОВ В 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

 

Список литературы:

  1. Брайан Гоец. Java concurrency in practice, 2006. ­–234 с.
  2. Java Platform, Enterprise Edition (Java EE) 8 ­– [Электронный ресурс]. – Режим доступа. – URL: https://javaee.github.io/tutorial/toc.html
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.