缓存Cache
Cache与Buffer的区别
buffer:通常在快与慢的实体之间充当临时数据存储媒介。buffer中的数据仅经过(读写)一次buffer(即数据为可消费的)。此外,buffer至少对一方是可见的。
cache:cache是不可见到的,没有一方意识到cache发生。允许相同的数据多次被读取。
基于注解
@Cacheable
@Cacheable
用于标识方法是可缓存的,被标识的方法将结果存储在缓存中,当再次执行时如果缓存内已经有值了,则直接放回无需执行方法。
@Cacheable("books") // 不加name的话,默认为cacheNames,指定缓存名字 public Book findBook(ISBN isbn) {...} @Cacheable({"books", "isbns"}) // 可指定多个缓存 public Book findBook(ISBN isbn) {...}
默认Key生成策略
缓存是通过键值对的方式来存储,所以需要对应的key才能读取数据。
KeyGenerator【spring4.0之后有变】
-
没有参数 ☞ SimpleKey.EMPTY
-
一个参数 ☞ 参数instance
-
多个参数 ☞ 包含所有参数的SimpleKey
如果想自定义默认的key生成器则需要实现org.springframework.cache.interceptor.KeyGenerator
接口
@Cacheable(cacheNames="books", key="#isbn") public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed){} @Cacheable(cacheNames="books", key="#isbn.rawNumber") public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed){} @Cacheable(cacheNames="books", key="T(someType).hash(#isbn)") public Book