码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Boot----缓存

时间:2019-08-19 00:22:32      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:时间   run   app   创建   users   frame   过期   访问   ram   

一、JSR107(复杂性较高)

Java Caching定义了5个核心接口,分别是CachingProvider,ICacheManager,Cache,Entry和Expiry。

·CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。

·CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。

·Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。

·Entry是一个存储在Cache中的key-value对。

·Expiry 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。

技术图片

 

 

二、Spring缓存抽象

Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用

JCache(JSR-107)注解简化我们开发;

·Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;

·Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache,ConcurrentMapCache等;

·每沟遇用需要缓存能的方法时,Spring会检查检查指定参教的指定的目标方法是否已经被调用过,如集有就直接从缓荐中获取方法调用后的结果,如集没有

调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。·使用Spring缓存抽象时我们需要关注以下两点;

1、确定方法需要被缓存以及他们的缓存策略

2、从缓存中读取之前缓存存储的数据

技术图片

技术图片

 

 

1、创建项目

mybaits mysql jdbc web cache

技术图片

 

1、搭建环境mybatis(略)

2、使用缓存

为了方便查看sql日志

logging.level.com.zy.springboot10.dao=debug

2,1 开启缓存

@EnableCaching //开启缓存
@MapperScan("com.zy.springboot10.dao")
@SpringBootApplication
public class Springboot10Application {
    public static void main(String[] args) {
        SpringApplication.run(Springboot10Application.class, args);
    }
} 

2.2service

@Service
public class UserService {
    @Autowired
    public TbuserMapper tbuserMapper;
    /**
     *@Cacheable:将方法的运行结果进行缓存;以后再要相同的数据,直接从缓存中获取,不用调用方法;
     * CacheMlanager管理多个Cache组件的,对缓存的真正CRUD操作在Cache组件中,每一个缓存组件有自己唯一一个名字;
     * 几个属性:
     *  cacheNames/value:指定缓存组件的名字;
     *  key:缓存数据使用的key;可以用它来指定。默认是使用方法参数的值 1-方法的返回值
     *      编写SpEL;#id;参数id的值  #a0 #p0 #root.args[0]
     *  keyGenerator:key的生成器;可以自己指定key的生成器的组件id
     *      key/keyGenerator:二选一使用
     * cacheManager:指定缓存管理器;或者cacheResolver指定获取解析器
     * condition:指定符合条件的情况下才缓存;
     * unless:否定缓存;当unless指定的条件为true,方法的返回值就不会被缓存;
     *      可以获取到结果进行判断unless="#result==null"
     * sync:是否使用异步模式
     */
    @Cacheable(cacheNames="tbUser")
    public Tbuser selectTbUserById(Integer id){
        Tbuser tbuser = tbuserMapper.selectByPrimaryKey(id);
        return tbuser;
    }
}  

2.3 测试

    @Autowired
    UserService userService;
    @Test
    public void contextLoads() {
        Tbuser tbuser = userService.selectTbUserById(47);  //service方法只会执行一次
        Tbuser tbuser1 = userService.selectTbUserById(47);
    }

  

 

Spring Boot----缓存

标签:时间   run   app   创建   users   frame   过期   访问   ram   

原文地址:https://www.cnblogs.com/yanxiaoge/p/11374310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!