2016-11-25 9 views
0

У меня есть два кэша в моем приложении. Я должен сделать фильтр И, где левая часть фильтра относится к кешу «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

это выглядит, как вы хотите реализовать если (CacheA.getValue() == CacheB.getValue()) \t возвращение А. это правильно? –

ответ

0

В конце концов вы будете иметь чтобы сделать два запроса, это поможет, если вы опишете пример использования.

Это можно сделать лучше, обратившись к нескольким кешам с помощью EntryProcessor, который представляет собой мир кода, запущенный в самом кеше, что дает вам лучшую производительность и целостность.

ПРИМЕЧАНИЕ: оба кэша должны принадлежать одному и тому же Service, иначе это не сработает.

+0

Привет, я добавил более подробно к моему вопросу. Я был бы признателен, если бы вы могли помочь мне в реализации. С наилучшими пожеланиями – user7210000

 Смежные вопросы

  • Нет связанных вопросов^_^