ben*_*000 13 java spring ehcache
我在网上到处寻找上述问题的简单答案,但却找不到它.我有一个方法,如:
@Cacheable(cacheNames = "objects")
public List<Object> get() { .. }
Run Code Online (Sandbox Code Playgroud)
我正在使用带有Spring Framework 4.2.1的EhCache 2.10.0,我可以看到此方法的以下输出:
Adding cacheable method 'get' with attribute: [CacheableOperation[public java.util.List com.example.DAO.get()] caches=[objects] | key='' ...
Run Code Online (Sandbox Code Playgroud)
也(在以后的日志记录中)
Computed cache key 'SimpleKey []' for operation ...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,@ Cacheable注释应该做什么?将每个对象放在由hashCode键入的缓存中(如其他地方暗示的那样)?或者只是将整个列表按原样放入一些基于列表的hashCode下的缓存中?
Spring Doc提到了这个:
由于高速缓存本质上是键值存储,因此需要将高速缓存方法的每次调用转换为适合高速缓存访问的密钥.开箱即用,缓存抽象使用基于以下算法的简单KeyGenerator:
如果没有给出参数,则返回
SimpleKey.EMPTY如果只给出一个参数,则返回该实例
如果给出了更多的参数,则返回从所有参数的哈希计算出的密钥.
https://docs.spring.io/spring/docs/5.0.8.RELEASE/spring-framework-reference/integration.html#cache
当您使用它进行注释时,@Cacheable(cacheNames = "objects")请为其指定一个缓存名称,以便识别缓存.由于您的方法没有任何参数,因此对于cacheName作为"对象",它将已经缓存了返回对象(List<Object>在本例中).每次调用该方法时,它都会使用cacheName对象检查缓存,并将键值设置为"0".如果它已经有一个上次缓存的返回对象,它将返回该对象.
更新:带有SimpleKey.EMPTYSpring 4+没有参数的键
| 归档时间: |
|
| 查看次数: |
8358 次 |
| 最近记录: |