缓存就是数据交换的缓冲区(称作Cache),是存贮数据(使用频繁的数据)的临时地方。当用户查询数据,首先在缓存中寻找,如果找到了则直接执行。如果找不到,则去数据库中查找。缓存的本质就是用空间换时间,牺牲数据的实时性,以服务器内存中的数据暂时代替从数据库读取最新的数据,减少数据库IO,减轻服务器压力,减少网络延迟,加快页面打开速度。
Spring从3.1开始定义了 org.springframework.cache.Cache和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术;并支持使用JCache(JSR 107)注解简化我们开发。
Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;
Cache接口下Spring提供了各种xxxCache的实现;如 RedisCache,EhCacheCache,ConcurrenMapCacheManager (springboot的默认缓存管理器)等。
每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否已经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户。
使用Spring缓存抽象时我们需要关注以下两点:1、确定方法需要被缓存以及他们的缓存策略;2、从缓存中读取之前缓存存储的数据。
Spring Cache提供的SpEL上下文数据同时SpEL提供了多种运算符(如图所示):
(上下文数据)
(多种运算符)