对于任何有兴趣的人:我已经实现了我正在寻找的行为的代码并在google-code上开源。在这里得到它! pojo-mvcc在Java中构建“孤立”和“自动更新”缓存(java.util.List)
-
嗨,大家好,
我想写其中含有大量从长寿的缓存中创建短命高速缓存的框架。这些短暂的缓存需要能够返回它们的entier内容,这是来自原始长生命的缓存的克隆。
实际上,我正在尝试构建的是短暂高速缓存的事务隔离级别。用户应该能够修改短暂高速缓存的内容,但不应该改变长生命期高速缓存(还有一种情况是应根据缓存类型推送更改)。
我会尽我所能,试图解释:
主缓存包含:[A,B,C,d,E,F]与国家创建 临时缓存[A,B,C, D,E,F]
1)临时缓存添加项目G:[A,B,C,D,E,F] 2)临时缓存删除项目B:[A,C,D,E ,F]
主缓存包含:[A,B,C,d,E,F]
3)主高速缓冲存储器添加项[X,Y,Z]:[A,B,C ,D,E,F,X,Y,Z]
临时缓存包含:A,C,d,E,F]
事情变得更难当项值可能发生变化,不应该总是被更新(所以我甚至不能共享底层对象实例,我需要使用克隆)。
我已经实现了使用ArrayList上的标准Collection构造函数创建List的新实例的简单方法,但是当您获得大约200,000个项目时,系统只会耗尽内存。我知道200,000的值是迭代过度的,但我试图强调我的代码。
我以为它可能能够以某种方式“代理”列表,所以临时缓存使用主缓存,并存储它的所有变化(实际上是变化的记忆),然而这很快变成当您想要迭代临时缓存或者检索特定索引处的项目时是一场噩梦。此外,我希望对列表内容进行一些修改(取决于临时缓存的类型,不管它是否为“自动更新”),并且我彻底摆脱了我的深度。
任何指向技术或数据结构的指针或只是一般概念来尝试和研究将不胜感激。
干杯,
Aidos
您是否限制可以缓存的类型?最好的是,以某种方式确保,你只能得到不可变的缓存条目,这将使一切变得更容易。 – Dominik 2010-04-10 16:33:10