one , brief introduction
1, Cache introduction
Spring from 3.1 Right from the beginning Cache Support for . Defined org.springframework.cache.Cache and
org.springframework.cache.CacheManager Interface to unify different caching technologies . And support the use of JCache（JSR-107）
Annotations simplify our development .
Its use method and principle are similar to Spring Support for transaction management .Spring Cache
It works on the method , Its core idea is , When we call a cache method, we will store the method parameters and return results in the cache as a key value pair .
2,Cache and CacheManager Interface description
Cache The interface contains various sets of cached operations , You operate the cache through this interface .
Cache Under the interface Spring Provides a variety of xxxCache Implementation of , such as ：RedisCache,EhCache,ConcurrentMapCache
CacheManager Defined creation , to configure , obtain , Manage and control multiple uniquely named Cache. these Cache Exist in CacheManager In the context of .
Every time a method that requires caching is called ,Spring
It will check whether the specified target method of the specified parameter has been called , If there is, get the result after the method call directly from the cache , If not, call the method and cache the result and return it to the user . Get the next call directly from the cache .
two ,@Cacheable Detailed introduction to the use of annotations
1, Cache usage steps
@Cacheable This annotation , It is used to use cache . So we can talk about the steps of using cache first ：
1, Enable annotation based caching , use @EnableCaching Marked on SpringBoot On the main startup class of .
2, Annotation cache annotation is enough
① First step ： Enable annotation based caching , use @EnableCaching Marked on springboot On the main startup class
② Step 2 ： Annotation cache annotation
notes ： Used here @Cacheable Annotations can cache the running results , Query the same data in the future , Get directly from cache , No need to call method .
2, Common attribute description
Let's introduce it @Cacheable Several common attributes of this annotation ：
cacheNames/value ： Used to specify the name of the cache component
key ： Used when caching data key, It can be used to specify . The default is to use the value of the method parameter .（ this key You can use spEL Expression ）
keyGenerator ：key Generator for . key and keyGenerator Use one out of two
cacheManager ： Can be used to specify a cache manager . Which cache manager to get the cache from .
condition ： It can be used to specify that the cache is only available when the conditions are met
unless ： Negative cache . When unless The specified condition is true , The return value of the method will not be cached . Of course, you can also get the results to judge .（ adopt #result
Get method results ）
sync ： Whether to use asynchronous mode .
Used to specify the name of the cache component , In which cache is the return result of the method placed , It can be an array , Support specifying multiple caches .
Used when caching data key. By default, the value of the method parameter is used . have access to spEL Expression to write .
key Generator for , You can specify by yourself key Generator for , Generate through this generator key.
Put in the cache like this key The generation rules of are customized by you keyGenerator To generate . However, it should be noted that ：
@Cacheable Properties of ,key and keyGenerator When using , Generally, one of two choices .
Cache only when conditions are met . Should the data returned by the method be cached , Can make a dynamic judgment .
Negative cache . When unless The specified condition is true , The return value of the method will not be cached .
Whether to use asynchronous mode . The default is that the method is completed , Store the results returned by the method in the cache synchronously .
3,spEL to write key
As I said before , Cached key Support use spEL Expression to write , Here is a summary of the use spEL To write key Some metadata that can be used ：