Ignite使用计算机内存存储缓存数据,达到提升缓存读写性能的。但是计算机内存往往是有限的,我们必须合理管理Ignite对内存的使用。

Ignite可以使用JVM堆外内存和堆内内存。使用堆外内存基本上会对JVM垃圾回收造成影响,也不会对JVM中的其他进程数据造成影响。但是使用堆内内存性能更高。

一般来说,开发人员应该设置一个比较大的堆外缓存和一个小一些的堆内缓存,并配置合理的缓存失效策略。

堆外缓存,堆内缓存,缓存失效策略配置十分简单,直接看代码(使用Ignite 2.0版本)

package com.coshaho.learn.ignite.offheap;

import javax.cache.expiry.CreatedExpiryPolicy;
import javax.cache.expiry.Duration; import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.DataPageEvictionMode;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.MemoryConfiguration;
import org.apache.ignite.configuration.MemoryPolicyConfiguration; /**
*
* IgniteMemoryManager.java Create on 2017年6月15日 下午2:42:52
*
* 类功能说明: ignite 2.0 缓存管理策略
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public class IgniteMemoryManager
{
public static void main(String[] args)
{
// 堆外缓存参数配置
MemoryPolicyConfiguration memPlc = new MemoryPolicyConfiguration();
memPlc.setName("10M_offheap_memory");
// 堆外缓存最小必须10M
memPlc.setInitialSize(10 * 1024 * 1024);
memPlc.setMaxSize(10 * 1024 * 1024);
// 堆外缓存最久未被访问删除策略
memPlc.setPageEvictionMode(DataPageEvictionMode.RANDOM_LRU);
MemoryConfiguration memCfg = new MemoryConfiguration();
memCfg.setMemoryPolicies(memPlc); IgniteConfiguration cfg=new IgniteConfiguration();
cfg.setMemoryConfiguration(memCfg);
Ignite ignite =Ignition.start(cfg); // 缓存配置
CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<Integer, String>();
cacheCfg.setName("myCache");
// 使用堆外缓存
cacheCfg.setMemoryPolicyName("10M_offheap_memory"); // 堆内缓存是否开启
cacheCfg.setOnheapCacheEnabled(false);
// 堆内缓存先进先出删除策略,参数1000表示堆内最多存储1000条记录
// cacheCfg.setEvictionPolicy(new FifoEvictionPolicy(1000)); // 设置缓存过期时间
cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.FIVE_MINUTES)); IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheCfg);
for(int i = 0; i < 10; i++)
{
StringBuffer str = new StringBuffer();
for(int j = 0; j < 10000; j++)
{
str.append("100+byte:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
+ "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
}
cache.put(i, str.append(i).toString());
System.out.println("frist get cache" + i +": " + cache.get(i).substring(0, 8));
} for(int i = 0; i < 10; i++)
{
if(null == cache.get(i))
{
System.out.println("second get cache" + i +": null");
}
else
{
System.out.println("second get cache" + i +": " + cache.get(i).substring(0, 8));
}
}
}
}

上述代码配置了一个10M的堆外缓存,并且关闭堆内缓存,配置的堆外缓存失效策略为最久未被访问删除策略,所以运行代码后,由于放入缓存的数据超过10M,所以会舍弃ID靠前的缓存,运行结果完全符合预期

[14:46:44] Ignite node started OK (id=dd2c004c)
[14:46:44] Topology snapshot [ver=1, servers=1, clients=0, CPUs=4, heap=0.88GB]
frist get cache0: 100+byte
frist get cache1: 100+byte
frist get cache2: 100+byte
frist get cache3: 100+byte
frist get cache4: 100+byte
frist get cache5: 100+byte
frist get cache6: 100+byte
frist get cache7: 100+byte
frist get cache8: 100+byte
frist get cache9: 100+byte
second get cache0: null
second get cache1: null
second get cache2: null
second get cache3: null
second get cache4: null
second get cache5: 100+byte
second get cache6: 100+byte
second get cache7: 100+byte
second get cache8: 100+byte
second get cache9: 100+byte

Ignite缓存大小管理的更多相关文章

  1. Ignite缓存管理初体验

    Ignite缓存管理初体验:ignite服务端配置,大家可以用参考官方进行配置(或者使用默认配置也可以). 本文中的ignite使用版本是1.7,与spring结合使用.maven依赖配置 ignit ...

  2. TCP的发送系列 — 发送缓存的管理(一)

    主要内容:TCP发送缓存的初始化.动态调整.申请和释放. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 数据结构 TCP对发送缓存的管理是在两个层面上进 ...

  3. Apache Ignite 学习笔记(四): Ignite缓存冗余备份策略

    Ignite的数据网格是围绕着基于内存的分布式key/value存储能力打造的.当初技术选型的时候,决定用Ignite也是因为虽然同样是key/value存储,它有着和其他key/value存储系统不 ...

  4. nodejs 搭建自己的简易缓存cache管理模块

    http://www.infoq.com/cn/articles/built-cache-management-module-in-nodejs/ 为什么要搭建自己的缓存管理模块? 这个问题其实也是在 ...

  5. Windows系统虚拟内存文件和休眠缓存大小优化

    虚拟内存的大小设置 虚拟内存的文件 pagefile.sys 一般在系统盘的根目录下,默认情况下会比较大.下面给出缩小设置方式. 我的电脑(鼠标右键)--属性--高级系统设置--切换到“高级”选项卡- ...

  6. Android记录20-获取缓存大小和清除缓存功能

    Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存 ...

  7. Android之计算缓存大小并且清空缓存

    转载博客:http://www.2cto.com/kf/201503/385492.html 项目中碰到了计算缓存大小和清空缓存的功能,这个很常见的功能,几乎每个APP都有,以为实现很简单,网上搜了一 ...

  8. ios 计算缓存大小并清理缓存

    SDWebImage.WebView产生的缓存 1.计算缓存大小 //SDWebImage缓存大小  UILabel *cleanDetailText = [[UILabel alloc]init]; ...

  9. SDWebimage如何获取缓存大小以及清除缓存

    sdwebimage如何获取缓存大小以及清除缓存 1.找到SDImageCache类 2.添加如下方法: - (float)checkTmpSize {    float totalSize = 0; ...

随机推荐

  1. iOS - Charles抓包数据

    一.Charles Charles破解版下载地址点我 1.1 Charles主要的功能 .截取Http.Https网络请求内容 .支持修改网络请求参数,方便调试 .支持网络请求的截取 并动态修改 1. ...

  2. redis -clock_gettime问题

    /home/wm/redis-/deps/jemalloc/src/nstime.c:: undefined reference to `clock_gettime' 这个错误 解决思路如下 .查找实 ...

  3. Windows Server 2008 R2之管理Sysvol文件夹

    以下是Sysvol文件夹示例图 Domain文件夹:是策略的实体,是策略和脚本存放地. Staging Areas:交换区,它用来存放多台DC之间交换(复制)的信息.DC上的相关信息(GPO)首先将要 ...

  4. Django---简单接受表单信息

    普通接受信息: 接受单选的值:例如:input select 等提交过来的信息 u = request.POST.get('username',None) 接受多选: h = request.POST ...

  5. RabbitMQ 安装和说明

    一.安装 1. 下载源码,RabbitMQ是使用Erlang开发,所以安装RabbitMQ前需要先安装Erlang.官方推荐从源码安装Erlang,因此下面开始从源码安装OTP 17.0.下载OTP ...

  6. 计蒜客 30994 - AC Challenge - [状压DP][2018ICPC南京网络预赛E题]

    题目链接:https://nanti.jisuanke.com/t/30994 样例输入: 5 5 6 0 4 5 1 1 3 4 1 2 2 3 1 3 1 2 1 4 样例输出: 55 样例输入: ...

  7. 机器学习TensorFlow安装经过摘要

    第一步:我在Github上面下载了TensorFlow项目源码 第二步:在tensorflow-master/tensorflow/docs_src/install里面找到了install_mac.m ...

  8. iOS-深入理解(转载)

    RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何 ...

  9. python xlwt 设置单元格样式-合并单元格

    xlwt模块详解--合并单元格 import xlwtworkbook = xlwt.Workbook()worksheet = workbook.add_sheet('My sheet')# 合并第 ...

  10. Catch---hdu3478(染色法判断是否含有奇环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意:有n个路口,m条街,一小偷某一时刻从路口 s 开始逃跑,下一时刻都跑沿着街跑到另一路口,问 ...