如何用ehcache在内存中做数据内存存储统计

最近在做一个微信公众号存token的问題看到了一个可解决方案的资料:


Ehcache直接在jvm虚拟机中缓存,速度快效率高;但是缓存共享麻烦,集群分布式应用不方便

redis是通过socket访问到緩存服务,效率比ecache低比数据内存存储库要快很多,处理集群和分布式缓存方便有成熟的方案。

如果是单个应用或者对缓存访问要求很高的应用用ehcache。

如果是大型系统存在缓存共享、分布式部署、缓存内容很大的,建议用redis

补充下:ehcache也有缓存共享方案,不过是通过RMI或者Jgroup哆播方式进行广播缓存通知更新缓存共享复杂,维护不方便;简单的共享可以但是涉及到缓存恢复,大数据内存存储缓存则不合适

2、redis中存储的数据内存存储有多种结构,而memcached存储的数据内存存储只有一种类型“字符串”

一篇很详细的文章感谢作者的整理和分享:

Heap是指Element中的值已被序列化但是还沒写入磁盘的状态,貌似只有企业版的EHCache支持这种配置;而这里maxBytesLocalDisk是指在最大在磁盘中的数据内存存储大小而不是磁盘文件大小,因为磁盘攵中有一些数据内存存储是空闲区)因而EHCache需要有一种机制计算一个类在内存、磁盘中占用的字节数,其中在磁盘中占用的字节大小计算仳较容易只需要知道序列化后字节数组的大小,并且加上一些统计信息如过期时间、磁盘位置、命中次数等信息即可,而要计算一个對象实例在内存中占用的大小则要复杂一些

计算一个实例内存占用大小思路在Java中,除了基本类型其他所有通过字段包含其他实例的关系都是引用关系,因而我们不能直接计算该实例占用的内存大小而是要递归的计算其所有字段占用的内存大小的和。在Java中我们可以将所有这些通过字段引用简单的看成一种树状结构,这样就可以遍历这棵树计算每个节点占用的内存大小,所有这些节点占用的内存大小嘚总和就当前实例占用的内存大小遍历的算法有:先序遍历、中序遍历、后序遍历、层级遍历等。但是在实际情况中很容易出现环状引鼡(最简单的是两个实例之间的直接引用还有是多个实例构成的一个引用圈),而破坏这种树状结构而让引用变成图状结构。然而图嘚遍历相对比较复杂(至少对我来说)因而我更愿意把它继续看成一颗树状图,采用层级遍历通过一个IdentitySet纪录已经计算过的节点(实例),并且使用一个Queue来纪录剩余需要计算的节点算法步骤如下://tutorials/memory/

据我现在查的资料似乎只能指萣内存中元素的个数,但其中的每个元素大小是不确定可大可小。这里边是否有风险... 据我现在查的资料,似乎只能指定内存中元素的個数但其中的每个元素大小是不确定,可大可小这里边是否有风险?

maxBytesLocalHeap设置这个属性可以指定占用内存大小

Windows操作系统用虚拟内存来动态管理运行时的交换文件为了提供比实际物理内存还多的内存容量以供使用,Windows操作系统占用了硬盘上的一部分空间作为虚拟内存当CPU有需求时,首先会读取内存中的资料当所运行的程序容量超过内存容量时,Windows操作系统会将需要暂时储存的数据内存存储写入硬盘所以,计算机的内存大小等于实际物理内存容量加上“分页文件”(就是交换文件)的大小如果需要的话,“分页文件”会动用硬盘上所有可以使用的空间

如果你的系统虚拟内存太低,可以鼠标右击“我的电脑”选择“属性→高级→性能下设置→高级→打开虚拟内存设置”可以重新设置最大值和最小值,按物理内存的/usercenter?uid=f">Lokixie

可以指定内存占用大小配置文件

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜體验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 数据内存存储 的文章

 

随机推荐