springCache使用

SpringCache

简介

springCache并不像正常缓存那样存储数据,而是在我们调用一个缓存方法时,会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再调用该方法,而是直接从缓存中获取结果进行返回,从而实现缓存的效果

@Cacheable注解

该注解用于标记缓存,就是对使用注解的位置进行缓存。该注解可以在方法或者类上进行标记,在类上标记时,该类所有方法都支持缓存
@Cacable使用时通常搭配三个属性使用

value

必须指定,用来指定Cache的名称,就是存储于哪个Cache上。

key

不必须指定,用于指定生成缓存对应的key,如果没有指定,则会为我们默认策略生成key。还可使用EL表达式用对象的属性指定key,如下代码

@Cacheable(value="users", key="#user.id")
public User findUser(User user){
    return user;
}

condition

用来指定当前缓存的出发条件,如下面代码,则当user.id为偶数时才会触发缓存

@Cacheable(value="users", key="#user.id",condition="#user.id%2==0")
public User findUser(User user){
    return user;
}

@CachePut注解

该注解将标记的方法的返回值放入缓存中,使用方法与@Cacheable一样。

那么,就会有一个问题,@Cacheable与@CachePut到底有什么区别呢?
当缓存中有相同的key的时候,@Cacheable不会存入缓存,而是直接从缓存中返回该key的值,而@CachePut不会管有不有相同的key,而是直接存入缓存。

@CacheEvict注解

该注解用于清除缓存数据,使用在类上时,清除该类所有方法的缓存。@CacheEvict也有@Cacheable三个属性,同时还有一个allEntries属性,该属性默认为false,当为true时,删除该value所有缓存。

pom依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

Controler.java

使用jpa操作mysql数据库,博客地址点击此

@RestController
@RequestMapping("test")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/saveUser")
    @CachePut(value = "user", key="#id")
    public User saveUser(Long id, String userName, String userPassword){
        User user = new User(id, userName, userPassword);
        userRepository.save(user);
        return user;
    }

    @GetMapping("/updateUser")
    public void updateUser(Long id, String userName, String userPassword){
        User user = new User(id, userName, userPassword);
        userRepository.save(user);
    }

    @GetMapping("/deleteUser")
    @CacheEvict(value = "user", key = "#id")
    public void deleteUser(Long id){
        userRepository.deleteById(id);
    }

    @GetMapping("/getUserById")
    @Cacheable(value = "user", key = "#id")
    public Optional<User> getUserById(Long id){
        return userRepository.findById(id);
    }

    @CacheEvict(value = "user", allEntries = true)
    public void deleteCache(){

    }

}

启动

启动前,需要在启动类上加上**@EnableCaching注解**,表明启动缓存,然后启动测试。

总结

对于高并发等情况,缓存的作用母庸质疑,一般来说会将访问量比较大的数据从数据库中查询出来放入缓存中,当下次获取数据的时候,直接从缓存中获取。通常缓存放入内存或硬盘中。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值