Spring кеш ничего не кеширует - PullRequest
       35

Spring кеш ничего не кеширует

0 голосов
/ 11 октября 2018

Я использую spring-boot-starter-parent версии 2.0.1

это application.properties

spring.cache.type=redis
spring.cache.cache-names=edges
spring.cache.redis.cache-null-values=false 
spring.cache.redis.time-to-live=60000000 
spring.cache.redis.key-prefix=true 
spring.redis.host=localhost 
spring.redis.port=6379

Это основной класс.

@SpringBootApplication
@EnableAsync
@EnableCaching
public class JanusApplication {
    public static void main(String[] args) {
        SpringApplication.run(JanusApplication.class, args);
    }
}

Это метод java, который я хочу кешировать.

@Service
public class GremlinService {

    @Cacheable(value = "edges")
    public String getEdgeId(long fromId, long toId, String label) {
        // basically finds an edge in graph database
    }


    public Edge createEdge(Vertex from, Vertex to, String label){
        String edgeId = getEdgeId((Long) from.id(), (Long) to.id(), label);
        if (!Util.isEmpty(edgeId)) {
            // if edge created before, use its id to query it again
            return getEdgeById(edgeId);
        } else {
            return createNewEdge((Long) from.id(), (Long) to.id(), label);
        }
    }
}

У меня нет другой конфигурации для redis или кеша.Хотя он не выдает никакой ошибки, он ничего не кеширует.Я проверяю с Redis-Cli.

1 Ответ

0 голосов
/ 11 октября 2018

Чтобы кэширование работало, функцию, которую нужно кэшировать, необходимо вызывать из внешнего класса.Это связано с тем, что Spring создает прокси для вашего компонента и разрешает кэширование, когда вызов метода проходит через этот прокси.Если вызов функции выполняется внутренне, он не пропускает прокси и, следовательно, кеширование не применяется.

Вот еще один ответ, который решает этот вопрос: Spring cache @Cacheable метод игнорируется при вызове изнутритот же класс

...