2016-01-31 2 views
0

У меня есть весеннее кэширование, включенное в моем загрузочном приложении. Простое тестирование показывает, что оно работает. Однако, когда я запускаю jmeter против него, я вижу, что вывод очень четко указывает на пропуски кэша с миллисекундами друг от друга.Весеннее кэширование не работает при большой нагрузке?

В конце концов, он уклоняется, но не до ошибок, потому что он перегружает мой пул подключений db.

Когда я снова запускаю тот же тест, он отлично работает; кеш уже загрунтован. Может кто-нибудь объяснить это?

Пример вывода

Looking for 'Philadelphia', 'Shoe' at timestamp: 1454203396865 
Looking for 'Philadelphia', 'Shoe' at timestamp: 1454203396863 
Looking for 'Atlanta', 'Wii' at timestamp: 1454203396992 
Looking for 'Atlanta', 'Wii' at timestamp: 1454203397001 
Looking for 'Atlanta', 'Wii' at timestamp: 1454203396998 
Looking for 'Atlanta', 'Wii' at timestamp: 1454203396998 
Looking for 'Atlanta', 'Wii' at timestamp: 1454203396993 
Looking for 'San Francisco', 'Jeep' at timestamp: 1454203397174 
Looking for 'San Francisco', 'Jeep' at timestamp: 1454203397187 
Looking for 'San Francisco', 'Jeep' at timestamp: 1454203397190 

Starting the test @ Sat Jan 30 18:41:55 PST 2016 (1454208115431) 
Waiting for possible shutdown message on port 4445 
summary +  1 in 7.1s = 0.1/s Avg: 2022 Min: 2022 Max: 2022 Err:  1 (100.00%) Active: 100 Started: 100 Finished: 0 
summary + 7999 in 17.3s = 463.4/s Avg: 244 Min: 82 Max: 9965 Err: 43 (0.54%) Active: 0 Started: 100 Finished: 100 
summary = 8000 in 24.3s = 328.9/s Avg: 244 Min: 82 Max: 9965 Err: 44 (0.55%) 
Tidying up ... @ Sat Jan 30 18:42:19 PST 2016 (1454208139824) 
... end of run 
Violas-MacBook-Pro:ou cbongiorno$ jmeter -n -t src/test/test-plan.jmx -l mc_results.jtl 
Creating summariser <summary> 
Created the tree successfully 
Starting the test @ Sat Jan 30 18:42:24 PST 2016 (1454208144475) 
Waiting for possible shutdown message on port 4445 
summary + 3034 in 5.5s = 554.8/s Avg: 93 Min: 81 Max: 272 Err:  0 (0.00%) Active: 100 Started: 100 Finished: 0 
summary + 4966 in 7.1s = 702.1/s Avg: 91 Min: 81 Max: 325 Err:  0 (0.00%) Active: 0 Started: 100 Finished: 100 
summary = 8000 in 13s = 637.9/s Avg: 92 Min: 81 Max: 325 Err:  0 (0.00%) 
Tidying up ... @ Sat Jan 30 18:42:37 PST 2016 (1454208157073) 

Фрагмент кода

@SpringBootApplication 
@EnableAutoConfiguration 
@EnableAsync 
@EnableScheduling 
@EnableCaching 
public class SampleApp { 

    public static void main(String[] args) throws Exception { 
     System.setProperty("hibernate.temp.use_jdbc_metadata_defaults","false"); 

     SpringApplication.run(SampleApp.class, args); 
    } 
} 

не в том же классе

@Cacheable("suggestions") 
    public Suggestion getSuggestionFor(String city, String item) { 
     System.out.format("Looking for '%s', '%s' at timestamp: %s\r\n", city,item,System.currentTimeMillis()); 
     Suggestion result = null; 
     List<Offer> offers = null; 
     if(city != null) 
      offers = repository.find(city, item); 
     else 
      offers = repository.find(item); 

     if (offers != null && offers.size() > 0) { 
      Map<Integer, Long> byPrice = offers.stream().collect(groupingBy(Offer::getListPrice, TreeMap::new, counting())); 

      Map.Entry<Integer, Long> entry = byPrice.entrySet().stream().reduce((e1, e2) -> MODE.compare(e1, e2) > 0 ? e1 : e2).orElse(null); 
      if (entry != null) 
       result = new Suggestion(city, item, entry.getKey(), entry.getValue(), offers.size()); 
     } 
     return result; 
    } 
+0

Возможно, это связано с использованием расистских вычислений, [разрешено] (https://github.com/spring-projects/spring-framework/commit/19d97c425316801a767cf99178ef30af730b1570) в 4.3? –

+0

Последняя весна в соответствии с maven central - 4.2.4. Это, безусловно, имеет потенциал. Где я могу найти 4.3 в качестве выпуска? –

+0

Попробуйте [моментальный снимок] (https://github.com/spring-projects/spring-framework/wiki/Downloading-Spring-artifacts#snapshots). –

ответ

0

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

@Cacheable("suggestions", key="#city.toString() + #item.toString()") 
public Suggestion getSuggestionFor(String city, String item) { 
    .... 
} 

Вы можете прочитать больше информации из this great answer на вопрос, связанный с кэшированных ключей.

+0

Я предположил, что он просто использует hashcode/equals всех объектов в списке аргументов. Я сделал то, что вы предлагали, и теперь он жалуется на вызов toString(), когда эти параметры являются нулевыми. Я буду охотиться за этим –

+0

Вам фактически не нужно использовать toString(), вы даже можете включить нулевые значения (если это возможно, чтобы они были пустыми). '' '#city? .toString()' '' может работать от верхней части головы, чтобы исправить проблему npe. – DominicEU

+0

Нет кости: идентичные результаты. но '?' сделал трюк для нулей –

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