2

我们想使用 Ehcache 缓存不应该存储到磁盘的敏感数据(数据只能驻留在主内存中)。将这种数据存储在磁盘上是非法的,因此需要谨慎对待。

我们已经在使用 Ehcache(有和没有兵马俑)用于常见的缓存目的。

我知道 Ehcache 提供了缓存到主内存和磁盘的选项,此外它还允许在使用主内存时溢出到磁盘。

我是 Ehcache 的新手,想知道如何配置 Ehcache 以保证这个特定的缓存永远不会触及磁盘。(我们目前主要使用默认配置)此外,一旦我们运行实现,如果有一种方法可以确认数据存储在哪里(确认没有数据未存储在磁盘上),那将是很好的。

4

2 回答 2

2

据我所知,必须明确启用对磁盘的持久性。请参阅此处的文档。如果您尚未添加此类配置,我怀疑默认情况下会将内容存储到磁盘中。检查您的 ehcache 配置,您是否看到与CacheWriter缓存的持久性或附件相关的任何内容?

我会说,一旦您的服务运行,您可以通过 JMX 获取缓存配置,以检查是否有磁盘持久性,如果有,它在哪里持久化。您可以通过这种方式启用 JMX,并且可以自行检查:

CacheManager cm = net.sf.ehcache.CacheManager.getInstance();
MBeanServer mbs = java.lang.management.ManagementFactory.getPlatformMBeanServer();
net.sf.ehcache.management.ManagementService.registerMBeans(cm, mbs, true, true, true, true, true);

例如,bean net.sf.cache/CacheConfiguration/CacheManager/cache/DiskPersistent 告诉您是否启用了磁盘持久性。但是,持久性也可以通过CacheWriter。要找出这一点,您不能使用 JConsole,但您必须以编程方式附加到 MBeanServer 并获取属性 net.sf.ehcache/Cache/CacheManager/cache/CacheConfiguration。这将返回一个net.sf.ehcache.management.CacheConfiguration实例,它应该告诉您注册的 CacheWriter,并希望它正在使用的配置。(我自己没有尝试过。)

此外,如果数据机密性对您非常重要,那么您还应该考虑加密您的数据(在缓存中和通过网络)。

于 2014-12-18T09:36:43.087 回答
2

在缓存级别:

默认情况下,旧overflowToDisk配置设置是false。如果没有现代persistence元素,则默认为none. 在这两种情况下,配置的缓存都没有磁盘层,因此不会将任何条目写入磁盘。

如果同一个缓存管理器托管磁盘支持的缓存,它将在配置的文件夹中创建文件 - 或者java.io.tmpdir- 在其路径中具有缓存名称。由于此名称被编码用于路径,因此可能不容易匹配,但您将能够评估没有磁盘后端的缓存没有在此结构中创建任何文件。

于 2014-12-18T09:06:41.593 回答