Spring缓存不缓存任何东西
Spring cache does not cache anything
我正在使用 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
这是主要的class。
@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。
为了使缓存工作,必须从外部调用要缓存的函数 class。
那是因为 Spring 为您的 bean 创建代理并在方法调用通过该代理时解析缓存。
如果函数调用是在内部完成的,它不会通过代理,因此不会应用缓存。
这是解决此问题的另一个答案:Spring cache @Cacheable method ignored when called from within the same class
我正在使用 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
这是主要的class。
@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。
为了使缓存工作,必须从外部调用要缓存的函数 class。 那是因为 Spring 为您的 bean 创建代理并在方法调用通过该代理时解析缓存。 如果函数调用是在内部完成的,它不会通过代理,因此不会应用缓存。
这是解决此问题的另一个答案:Spring cache @Cacheable method ignored when called from within the same class