Кеширование в heap-памяти (On-Heap)#

DataGrid использует память вне heap (Off-Heap) для выделения областей памяти вне Java Heap. Чтобы включить дополнительное кеширование в Java Heap, установите свойство CacheConfiguration.setOnheapCacheEnabled(true).

Кеширование в heap-памяти пригодится при большом количестве операций чтения кеша на серверных узлах, которые работают с записями кеша в бинарном формате или вызывают их десериализацию. Например, кеширование в heap-памяти пригодится при распределенных вычислениях или получении данных от кеша для дальнейшей обработки.

<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="cacheConfiguration">
        <bean class="org.apache.ignite.configuration.CacheConfiguration">
            <property name="name" value="myCache"/>
            <property name="onheapCacheEnabled" value="true"/>
        </bean>
    </property>
</bean>
CacheConfiguration cfg = new CacheConfiguration();
cfg.setName("myCache");
cfg.setOnheapCacheEnabled(true);
var cfg = new CacheConfiguration
{
    Name = "myCache",
    OnheapCacheEnabled = true
};

Настройка политики вытеснения#

При включении кеширования в heap-памяти можно использовать одну из политик вытеснения (eviction policy), чтобы управлять растущим On-Heap-кешем.

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

Внимание

Политики вытеснения для On-Heap-кешей удаляют записи из Java Heap. Это не затрагивает записи, которые хранятся в основной памяти (Off-Heap).

Некоторые политики поддерживают вытеснение пакетами (batch) и вытеснение по ограничению объема памяти. Вытеснение записей пакетами начинается, когда размер кеша превысил максимальную величину batchSize. В этом случае записи вытесняются пакетами размером batchSize. Вытеснение по ограничению размера памяти начинается, когда размер On-Heap-кеша в байтах становится больше максимального.

Важно

Вытеснение пакетами поддерживается, только если не установлен максимальный размер On-Heap-кеша.

Политики вытеснения настраиваются с помощью интерфейса EvictionPolicy. Реализация политики вытеснения уведомляется о каждом изменении кеша и определяет алгоритм выбора записей для вытеснения из On-Heap-кеша.

Политика вытеснения LRU#

Политика вытеснения LRU основана на алгоритме Least Recently Used. Она гарантирует, что первой вытеснится наименее используемая запись (то есть запись, которая не была затронута в течение самого длительного времени).

Примечание

Политика вытеснения LRU подходит для большинства случаев использования кеширования в heap-памяти. Если есть сомнения в выборе политики вытеснения, используйте LRU.

Политика LRU поддерживает вытеснение пакетами (batch) и вытеснение по ограничению объема памяти. LRU можно включить в конфигурации кеша.

<bean class="org.apache.ignite.cache.CacheConfiguration">
  <property name="name" value="myCache"/>

  <!-- Включение кеширования в heap для распределенного кеша. -->
  <property name="onheapCacheEnabled" value="true"/>

  <property name="evictionPolicy">
    <!-- Политика вытеснения LRU. -->
    <bean class="org.apache.ignite.cache.eviction.lru.LruEvictionPolicy">
        <!-- Установите максимальный размер кеша 1 миллион (по умолчанию — 100 000). -->
      <property name="maxSize" value="1000000"/>
    </bean>
  </property>

</bean>
CacheConfiguration cacheCfg = new CacheConfiguration();

cacheCfg.setName("cacheName");

// Включение кеширования в heap для распределенного кеша.
cacheCfg.setOnheapCacheEnabled(true);

// Установите максимальный размер кеша 1 миллион (по умолчанию — 100 000).
cacheCfg.setEvictionPolicyFactory(() -> new LruEvictionPolicy(1000000));

IgniteConfiguration cfg = new IgniteConfiguration();

cfg.setCacheConfiguration(cacheCfg);
var cfg = new IgniteConfiguration
{
    CacheConfiguration = new[]
    {
        new CacheConfiguration
        {
            Name = "cacheName",
            OnheapCacheEnabled = true,
            EvictionPolicy = new LruEvictionPolicy
            {
                MaxSize = 100000
            }
        }
    }
};

Политика вытеснения FIFO#

Политика вытеснения FIFO («первым пришел — первым ушел») основана на алгоритме FIFO. Она гарантирует, что первой вытеснится запись, которая была в On-Heap-кеше в течение самого длительного времени. Политика FIFO отличается от LruEvictionPolicy: FIFO игнорирует порядок, в котором использовались записи.

Политика FIFO поддерживает вытеснение пакетами (batch) и вытеснение по ограничению объема памяти. Пример, как включить FIFO:

<bean class="org.apache.ignite.cache.CacheConfiguration">
  <property name="name" value="myCache"/>

  <!-- Включение кеширования в heap для распределенного кеша. -->
  <property name="onheapCacheEnabled" value="true"/>

  <property name="evictionPolicy">
    <!-- Политика вытеснения FIFO. -->
    <bean class="org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicy">
        <!-- Установите максимальный размер кеша 1 миллион (по умолчанию — 100 000). -->
      <property name="maxSize" value="1000000"/>
    </bean>
  </property>

</bean>
CacheConfiguration cacheCfg = new CacheConfiguration();

cacheCfg.setName("cacheName");

// Включение кеширования в heap для распределенного кеша.
cacheCfg.setOnheapCacheEnabled(true);

// Установите максимальный размер кеша 1 миллион (по умолчанию — 100 000).
cacheCfg.setEvictionPolicyFactory(() -> new FifoEvictionPolicy(1000000));

IgniteConfiguration cfg = new IgniteConfiguration();

cfg.setCacheConfiguration(cacheCfg);
var cfg = new IgniteConfiguration
{
    CacheConfiguration = new[]
    {
        new CacheConfiguration
        {
            Name = "cacheName",
            OnheapCacheEnabled = true,
            EvictionPolicy = new FifoEvictionPolicy
            {
                MaxSize = 100000
            }
        }
    }
};

Политика вытеснения Sorted#

Политика вытеснения на основании сортировки (Sorted) похожа на политику FIFO. В политике Sorted порядок вытеснения определяется с помощью компаратора (comparator) по умолчанию или пользовательского компаратора. SortedEvictionPolicy гарантирует, что первой вытеснится запись с наименьшим значением.

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

Политика поддерживает вытеснение пакетами (batch) и вытеснение по ограничению объема памяти. Политику вытеснения Sorted можно включить в конфигурации кеша.

<bean class="org.apache.ignite.cache.CacheConfiguration">
  <property name="name" value="myCache"/>

  <!-- Включение кеширования в heap для распределенного кеша. -->
  <property name="onheapCacheEnabled" value="true"/>

  <property name="evictionPolicy">
    <!-- Политика вытеснения Sorted. -->
    <bean class="org.apache.ignite.cache.eviction.sorted.SortedEvictionPolicy">
      <!--
      Установите максимальный размер кеша 1 миллион (по умолчанию — 100 000)
      и используйте компаратор по умолчанию.
      -->
      <property name="maxSize" value="1000000"/>
    </bean>
  </property>

</bean>
CacheConfiguration cacheCfg = new CacheConfiguration();

cacheCfg.setName("cacheName");

// Включение кеширования в heap для распределенного кеша.
cacheCfg.setOnheapCacheEnabled(true);

// Установите максимальный размер кеша 1 миллион (по умолчанию — 100 000).
cacheCfg.setEvictionPolicyFactory(() -> new SortedEvictionPolicy(1000000));

IgniteConfiguration cfg = new IgniteConfiguration();

cfg.setCacheConfiguration(cacheCfg);