2014-11-19 4 views
0

Я использую Sesame в веб-приложении JSP, и я хотел бы знать, есть ли способ кэшировать некоторые запросы, которые используются последовательно.Кэширование кунжута общих запросов

+0

Можете ли вы дать более подробную информацию о том, чего именно вы пытаетесь достичь? Какова ваша точная настройка и что именно вам нужно кэшировать? –

+0

У меня есть некоторые sparql-запросы, такие как «select? Att? Value where {placeid? Att? Value}». Я делаю этот запрос на 30 мест, и я хочу «кешировать» их, если они были использованы –

ответ

1

Я предполагаю, что вы хотите «кэшировать» запрос результат для заданного запроса с определенным значением. Вы можете очень легко создать такой кеш самостоятельно. Просто создать класс для общего запроса, который внутренне сохраняет ссылку на HashMap, что отображающее значение ключа (например, placeid для примера запроса) в результате запроса:

HashMap<URI, TupleQueryResult> cache = new HashMap<>(); 

Тогда все вы делаете чек, для данного места id, если он присутствует в кеше. Если это не так, вы выполняете запрос, получить результат обратно и материализовать его в качестве MutableTupleQueryResult, который вы можете положить в этом кэше:

if (!cache.contains(placeId)) { 
     // reuse the prepared query with the specific binding for which we want a result 
     preparedQuery.setBinding("placeid", placeId); 

     // execute the query and add the result to a result object we can reuse multiple times 
     TupleQueryResult result = new MutableTupleQueryResult(preparedQuery.evaluate()); 

     // put the result in the cache. 
     cache.put(placeId, result); 
} 
return cache.get(placeId); 

Если вы хотите что-то немного более сложное (например, то, что выбрасывает кешированные элементы через определенное время или задает ограничение на размер вашего кеша), я бы посмотрел на использование чего-то вроде Guava Cache вместо простого HashMap, но базовая настройка осталась бы такой же.

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