SpringCache

SpringCache

一、SpringCache介绍
1.Spring Cache是一个框架,实现基于注解的缓存功能。
2.Spring Cache提供了一层抽象,底层可以切换不同的cache实现,具体的就是通过CacheManager接口
  来统一不同的缓存技术。
3.CacheManager是Spring提供的各种缓存技术抽象接口。

针对不同的缓存技术需要实现不同的CacheManager

EhCacheCacheManager --> 使用EhCache作为缓存技术
GuavaCacheManager --> 使用GoogleGuavaCache作为缓存技术
RedisCacheManager --> 使用Redis作为缓存技术
二、SpringCache常用注解
1@EnableCaching ---> 开启缓存注解功能, 在启动类上使用
2@Cacheable ---> 查询缓存,在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接
   返回缓存数据,如果没有数据,调用方法并将方法返回值放到缓存中。
3@CachePut ---> 添加缓存, 将方法的返回值放到缓存中。
4@CacheEvict --> 删除缓存, 将一条或多条或一类数据从缓存中删除。

3、@CachePut —> 添加缓存

   /**
     * @CachePut:
     *      作用:把方法的返回值放到缓存中去
     *      属性:
     *          cacheNames | value : 一种分类的名称
     *          key : 具体的每一条缓存数据的唯一标识
     *              #result : 得到方法的返回值[比较常用]
     *              #root.methodName : 得到方法的目标对象
     *              #root.target : 得到调用这个方法的目标对象
     *              #root.args[0] | #a0 | #p0 : 得到第一个参数[比较常用]
     *              当没有导入依赖的时候,会默认把数据保存到内存中的一个Map集合中去
     */
	@CachePut(cacheNames = "user", key = "#result.username")
    @RequestMapping("/add")
    public User add(User user){
        System.out.println("user = " + user);
        return user;
    }

2、@Cacheable —> 查询缓存

   /**
     * @Cacheable:
     *      作用:
     *          1. 先查询缓存里面有没有数据,有就直接返回[不执行方法体]
     *          2. 如果没有缓存,就会执行方法体,得到方法的结果,然后把结果存储到缓存中去
     *      属性:
     *          cacheName | value : 存储这类数据的唯一标识
     *          key : 存储这类数据里面的这条数据的唯一标识
     *              #result : 得到方法的返回值【常用】
     *              #root.methodName : 得到方法的名称
     *              #root.target : 得到调用这个方法的目标对象
     *              #root.args[0] | #p0 | #a0 : 得到第一个参数【常用】
     */
	@Cacheable(cacheNames = "user", key = "#a0")
    @RequestMapping("/findById")
    public User findById(int id){
        System.out.println("执行findById..."+id);
        if (id == 1){
            return new User("zhangsan","1234556");
        }else if (id == 2){
            return new User("lisi","1234556");
        }
        return new User("王五","1234556");
    }
   /**
     * 关于null值, 不缓存处理
     *      1. 默认的情况下,@Cacheable不管是什么返回值,只要方法正常执行,得到的结果都缓存起来
     *      2. 不希望把null缓存起来,没有意义
     *          属性:
     *              condition : 满足她的条件,就缓存
     *                  如:condition = "#result != null"
     *              unless : 不满足她的条件,就缓存
     *                  如:unless = "#result == null"
     */
	@Cacheable(cacheNames = "user" , key = "#a0"  , unless = "#result == null")
    @RequestMapping("/findById02")
    public User findById02(int id){
        System.out.println("执行了findById方法~!~!~!");
        // 真实的代码应该是要去调用service
        //User user = userService.findById(id);
        //return user;

        //伪代码
        if(id == 1){
            return new User("zhangsan", "123456");
        }else if(id == 2){
            return new User("lisi", "666666");
        }
        return null;
    }

3、@CacheEvict --> 删除缓存

   /**
     * @CacheEvict
     *      作用: 删除缓存里面的一条、多条、一类数据
     *      属性:
     *          cacheName | value : 缓存里面的存储这一类数据的唯一标识
     *          key : 存储这类数据中一条数据的唯一标识
     *              #result : 得到方法的返回值[常用]
     *              #root.methodName : 得到方法名称
     *              #root.target : 得到调用这个方法的目标对象
     *              #root.args[0] | #p0 | #a0 : 得到第一个参数【常用】
     *   删除一个:
     *          @CacheEvict(cacheNames="user", key="#a0")
     *   删除一个:
     *         @CacheEvict(evict={
     *             @CacheEvict(cacheNames = "user", key="#a0"),
     *             @CacheEvict(cacheNames = "user", key="#a1"),
     *             @CacheEvict(cacheNames = "user", key="#a2"),
     *             @CacheEvict(cacheNames = "user", key="#a3"),
     *             @CacheEvict(cacheNames = "user", key="#a4"),
     *         })
     *   删除一类
     *     @CacheEvict(cacheNames = "user", allEntries=true)
     */
	@CacheEvict(cacheNames = "user", allEntries = true)
    @RequestMapping("/deleteById")
    public String deleteById(){
        System.out.println("deleteById");
        return "delete success... ";
    }
三、SpringCache使用方法
1、导入maven坐标
	spring-boot-starter-data-redis
	spring-boot-starter-cache
2、配置application.yml
	spring:
		cache:
			redis:
				# 设置缓存有效期
				time-to-live: 1800000000000 
			    # 设置redis的地址
			    host: redis的地址
			    port: 6379
			    database: 2
3、在启动类上加上@EnableCacheing注解
4、在Controller方法上加入@Cacheable@CacherEvict等注解,进行缓存操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值