Spring 的@Cacheable 放在返回列表的方法上时会做什么?
What does Spring's @Cacheable do when placed on a method returning a list?
我在网上到处寻找上述问题的简单答案,但找不到。我有一个像这样的方法:
@Cacheable(cacheNames = "objects")
public List<Object> get() { .. }
我将 EhCache 2.10.0 与 Spring Framework 4.2.1 一起使用,我可以看到此方法的以下输出:
Adding cacheable method 'get' with attribute: [CacheableOperation[public java.util.List com.example.DAO.get()] caches=[objects] | key='' ...
还有(在以后的记录中)
Computed cache key 'SimpleKey []' for operation ...
在这种情况下,@Cacheable 注释应该做什么?将每个对象放入由 hashCode 键入的缓存中(如其他地方所暗示的那样)?或者只是将整个列表按原样放入缓存中,使用一些基于列表的哈希码?
Spring 文档提到了这一点:
Since caches are essentially key-value stores, each invocation of a
cached method needs to be translated into a suitable key for cache
access. Out of the box, the caching abstraction uses a simple
KeyGenerator based on the following algorithm:
If no params are given, return SimpleKey.EMPTY
If only one param is given, return that instance
If more the one param is given, return a key computed from the hashes of all parameters.
https://docs.spring.io/spring/docs/5.0.8.RELEASE/spring-framework-reference/integration.html#cache
当你用 @Cacheable(cacheNames = "objects")
注释它时,你给它一个缓存名称,它可以根据这个名称来识别缓存。由于您的方法没有任何参数,对于作为 "objects" 的 cacheName,它已经缓存了 return 对象(在本例中为 List<Object>
)。每次调用该方法时,它都会使用 cacheName 对象检查缓存,键值为“0”。如果它已经有一个先前缓存的 return 对象,它将 return 该对象。
已更新:SimpleKey.EMPTY
键没有参数 Spring 4+
我在网上到处寻找上述问题的简单答案,但找不到。我有一个像这样的方法:
@Cacheable(cacheNames = "objects")
public List<Object> get() { .. }
我将 EhCache 2.10.0 与 Spring Framework 4.2.1 一起使用,我可以看到此方法的以下输出:
Adding cacheable method 'get' with attribute: [CacheableOperation[public java.util.List com.example.DAO.get()] caches=[objects] | key='' ...
还有(在以后的记录中)
Computed cache key 'SimpleKey []' for operation ...
在这种情况下,@Cacheable 注释应该做什么?将每个对象放入由 hashCode 键入的缓存中(如其他地方所暗示的那样)?或者只是将整个列表按原样放入缓存中,使用一些基于列表的哈希码?
Spring 文档提到了这一点:
Since caches are essentially key-value stores, each invocation of a cached method needs to be translated into a suitable key for cache access. Out of the box, the caching abstraction uses a simple KeyGenerator based on the following algorithm:
If no params are given, return
SimpleKey.EMPTY
If only one param is given, return that instance
If more the one param is given, return a key computed from the hashes of all parameters.
https://docs.spring.io/spring/docs/5.0.8.RELEASE/spring-framework-reference/integration.html#cache
当你用 @Cacheable(cacheNames = "objects")
注释它时,你给它一个缓存名称,它可以根据这个名称来识别缓存。由于您的方法没有任何参数,对于作为 "objects" 的 cacheName,它已经缓存了 return 对象(在本例中为 List<Object>
)。每次调用该方法时,它都会使用 cacheName 对象检查缓存,键值为“0”。如果它已经有一个先前缓存的 return 对象,它将 return 该对象。
已更新:SimpleKey.EMPTY
键没有参数 Spring 4+