堆上缓存|点燃文档

点燃2023年峰会-按需观看-立即注册!

编辑

堆上缓存

Ignite使用堆外内存分配Java堆外的内存区域。但是,您可以通过设置CacheConfiguration.setOnheapCacheEnabled(true).

当您在使用中缓存项的服务器节点上执行大量缓存读取时,在堆内缓存非常有用二进制形式或调用缓存项的反序列化。例如,当分布式计算或部署的服务从缓存中获取一些数据以进行进一步处理时,可能会发生这种情况。

<豆类 类=“org.apache.ignite.conformation.IgniteConfiguration”>
    <属性 姓名=“缓存配置”>
        <豆类 类=“org.apache.ignite.conformation.CacheConfiguration”>
            <属性 姓名=“名称” 价值=“myCache”/>
            <属性 姓名=“onheapCacheEnabled” 价值=“正确”/>
        </bean>
    </属性>
</bean>
缓存配置 cfg(立方英尺/加仑) = 新的 缓存配置();
cfg(立方英尺/加仑).集合名称(“myCache”);
cfg(立方英尺/加仑).已启用setOnheapCacheEnabled(真的);
无功功率,无功功率 cfg(立方英尺/加仑) = 新的 缓存配置
{
    姓名 = “myCache”,
    OnheapCacheEnabled(Onheap缓存已启用) = 真的
};
此API目前不适用于C++。您可以使用XML配置。

配置驱逐策略

启用堆上缓存后,可以使用堆上收回策略之一来管理不断增长的堆上缓存。

收回策略控制缓存的堆上内存中可以存储的最大元素数。每当达到最大堆上缓存大小时,就会从Java堆中收回条目。

注释
堆上收回策略仅从Java堆中删除缓存项。存储在内存堆外区域中的条目不受影响。

一些收回策略支持批收回和按内存大小限制收回。如果启用了批收回,则当缓存大小变为批处理大小元素大于最大缓存大小。在这种情况下,批处理大小条目被逐出。如果启用了按内存大小限制逐出,则当缓存项的大小(以字节为单位)大于最大内存大小时,将开始逐出。

注释
仅当未设置最大内存限制时,才支持批收回。

驱逐策略是可插入的,并通过驱逐政策接口。逐出策略的实现会收到每个缓存更改的通知,并定义了选择要从堆上缓存逐出的条目的算法。

最近最少使用(LRU)

LRU驱逐政策,基于最近最少使用(LRU)算法,确保首先逐出最近最少使用的条目(即最长时间未接触的条目)。

注释
LRU逐出策略非常适合堆上缓存的大多数用例。如果有疑问,请随时使用。

可以在缓存配置中启用此驱逐策略,如下面的示例所示。它支持按内存大小限制进行批收回和收回。

<豆类 类=“org.apache.ignite.cache.CacheConfiguration”>
  <属性 姓名=“名称” 价值=“myCache”/>

  <!-- 为此分布式缓存启用堆上缓存。-->
  <属性 姓名=“onheapCacheEnabled” 价值=“正确”/>

  <属性 姓名=“驱逐政策”>
    <!-- LRU收回策略。-->
    <豆类 类=“org.apache.ignite.cache.excision.lru.LruEvictionPolicy”>
        <!-- 将最大缓存大小设置为100万(默认值为100000)。-->
      <属性 姓名=“最大尺寸” 价值="1000000"/>
    </bean>
  </属性>

</bean>
缓存配置 缓存Cfg = 新的 缓存配置();

缓存Cfg.集合名称(“缓存名称”);

//为此分布式缓存启用堆上缓存。
缓存Cfg.设置OnheapCacheEnabled(真的);

//将最大缓存大小设置为100万(默认值为100000)。
缓存Cfg.setEvictionPolicyFactory(设置驱逐政策工厂)(() -> 新的 Lru驱逐政策(1000000));

点火配置 cfg(立方英尺/加仑) = 新的 点火配置();

cfg(立方英尺/加仑).setCacheConfiguration(设置缓存配置)(缓存Cfg);
无功功率,无功功率 cfg(立方英尺/加仑) = 新的 点火配置
{
    缓存配置 = 新的[]
    {
        新的 缓存配置
        {
            姓名 = “缓存名称”,
            OnheapCacheEnabled(Onheap缓存已启用) = 真的,
            驱逐政策 = 新的 Lru驱逐政策
            {
                最大尺寸 = 100000
            }
        }
    }
};
此API目前不适用于C++。您可以使用XML配置。

先进先出(FIFO)

FIFO逐出策略,基于先进先出(FIFO)算法,确保首先收回堆缓存中时间最长的条目。它不同于Lru驱逐政策因为它忽略了访问条目的顺序。

可以在缓存配置中启用此收回策略,如下例所示。它支持按内存大小限制进行批收回和收回。

<豆类 类=“org.apache.ignite.cache.CacheConfiguration”>
  <属性 姓名=“名称” 价值=“myCache”/>

  <!-- 为此分布式缓存启用堆上缓存。-->
  <属性 姓名=“onheapCacheEnabled” 价值=“正确”/>

  <属性 姓名=“驱逐政策”>
    <!-- FIFO逐出策略。-->
    <豆类 类=“org.apache.ignite.cache.excision.fifo.FifoEvictionPolicy”>
        <!-- 将最大缓存大小设置为100万(默认值为100000)。-->
      <属性 姓名=“最大尺寸” 价值="1000000"/>
    </bean>
  </属性>

</bean>
缓存配置 缓存Cfg = 新的 缓存配置();

缓存Cfg.集合名称(“缓存名称”);

//为此分布式缓存启用堆上缓存。
缓存配置.设置OnheapCacheEnabled(真的);

//将最大缓存大小设置为100万(默认值为100000)。
缓存Cfg.setEvictionPolicyFactory(设置驱逐政策工厂)(() -> 新的 Fifo驱逐政策(1000000));

点火配置 cfg(立方英尺/加仑) = 新的 点火配置();

cfg(立方英尺/加仑).setCacheConfiguration(设置缓存配置)(缓存Cfg);
无功功率,无功功率 cfg(立方英尺/加仑) = 新的 点火配置
{
    缓存配置 = 新的[]
    {
        新的 缓存配置
        {
            姓名 = “缓存名称”,
            OnheapCacheEnabled(Onheap缓存已启用) = 真的,
            驱逐政策 = 新的 Fifo驱逐政策
            {
                最大尺寸 = 100000
            }
        }
    }
};
此API目前不适用于C++。您可以使用XML配置。

已排序

排序逐出策略与FIFO逐出策略类似,不同之处在于,条目的顺序由默认值或用户定义的比较器定义,并确保首先逐出最小条目(即具有最小值的整数键的条目)。

默认比较器使用缓存项的键进行比较,这就要求使用键来实现可比接口。您可以提供自己的比较器实现,它可以使用键、值或两者进行条目比较。

在缓存配置中启用排序收回策略,如下所示。它支持按内存大小限制进行批收回和收回。

<豆类 类=“org.apache.ignite.cache.CacheConfiguration”>
  <属性 姓名=“名称” 价值=“myCache”/>

  <!-- 为此分布式缓存启用堆上缓存。-->
  <属性 姓名=“onheapCacheEnabled” 价值=“正确”/>

  <属性 姓名=“驱逐政策”>
    <!-- 已排序的逐出策略。-->
    <豆类 类=“org.apache.iignet.cacher.ejection.sorted.SortedEvectionPolicy”>
      <!--将最大缓存大小设置为100万(默认值为100000)并使用默认比较器。-->
      <属性 姓名=“最大尺寸” 价值="1000000"/>
    </bean>
  </属性>

</bean>
缓存配置 缓存Cfg = 新的 缓存配置();

缓存Cfg.集合名称(“缓存名称”);

//为此分布式缓存启用堆上缓存。
缓存Cfg.设置OnheapCacheEnabled(真的);

//将最大缓存大小设置为100万(默认值为100000)。
缓存Cfg.设置驱逐策略工厂(() -> 新的 排序的撤离策略(1000000));

点火配置 cfg(立方英尺/加仑) = 新的 点火配置();

cfg(立方英尺/加仑).setCacheConfiguration(设置缓存配置)(缓存Cfg);
此API目前不适用于C#/。净利润。您可以使用XML配置。
此API目前不适用于C++。您可以使用XML配置。