我的应用程序中有两个缓存。我必须做一个AND过滤器,其中过滤器的左侧部分是高速缓存“A”,过滤器的右侧部分是高速缓存“B”。
这可以吗?
我目前的过滤器就像:
AllFilter(
AllFilter(
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=0)), 1),
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=1)), C)
),
AndFilter(
GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=4)), 1998-12-31 00:00:00.0),
OrFilter(
AndFilter(
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), S),
GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=27)), 280)
),
AndFilter(
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), N),
GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=26)), 280)
)
)
)
)
问题是这个提取器必须对不同的缓存执行操作。如果所有条件都在同一个缓存中,则代码为:
list.addAll(cacheA.keySet(myFilter));
但实际上过滤器超过了三个不同的缓存:
cacheA ->
AllFilter(
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=0)), 1),
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=1)), C)
)
cacheB ->
GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=4)), 1998-12-31 00:00:00.0)
cacheC and CacheA ->
OrFilter(
AndFilter(
CacheA --> EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), S),
CacheB --> GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=27)), 280)
),
AndFilter(
CacheA --> EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), N),
CacheB --> GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=26)), 280)
)
)
)
最亲切的问候
答案 0 :(得分:0)
最终你必须提出两个查询,如果你描述你的用例,这将有所帮助。
通过使用EntryProcessor访问多个缓存可以使其更好,这是缓存本身运行的代码,它可以提供更好的性能和完整性。
注意:两个缓存都属于同一个Service,否则无效。