springbootii-cache 基于注解的声明式缓存

Posted 七彩的人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springbootii-cache 基于注解的声明式缓存相关的知识,希望对你有一定的参考价值。

测试版本springboo2.0.4

 

1、使用缓存注解

通用属性解释:

value属性:要使用缓存的名称

key属性:使用SpEL表达式自定义缓存Key,

例如:#name—以参数name作为自定义缓存Key,

#result.name—以返回值结果的name属性作为自定义缓存Key

 

(1)@Cacheable注解

如果没有缓存则会执行方法并将返回值缓存,如果有缓存时,不会执行方法而是直接返回缓存中的值

 /**
     * cacheNames 设置缓存的值
     * key:指定缓存的key,这是指参数id值。key可以使用spEl表达式
     */
    @Cacheable(value = "userCache", key = "#id", unless="#result == null")
    public User getById(int id) {
        logger.info("获取用户start...");
        return userMapper.selectById(id);
    }

 

 

@Cacheable(value = "allUsersCache", unless = "#result.size() == 0")
    public List<User> getAllUsers() {
        logger.info("获取所有用户列表");
        return userMapper.selectList(null);
    }

当返回的结果size == 0时 不缓存

 

(2)@CachePut注解

不管有没有缓存都会执行方法并将结果缓存起来

 

(3)@CacheEvict注解

移除指定缓存

/**
     * 创建用户,同时使用新的返回值的替换缓存中的值
     * 创建用户后会将allUsersCache缓存全部清空
     */
    @Caching(
            put = {@CachePut(value = "userCache", key = "#user.id")},
            evict = {@CacheEvict(value = "allUsersCache", allEntries = true)}
    )
    public User createUser(User user) {
        logger.info("创建用户start..., user.id=" + user.getId());
        userMapper.insert(user);
        return user;
    }

 

创建一个新用户会缓存,然后清空掉所有用户的缓存

注意:

a.User对象需要实现序列化接口

b.只有@CacheEvict注解的方法返回值可以为void

 参考项目

 

 

参考:

https://my.oschina.net/u/3773384/blog/1795296

以上是关于springbootii-cache 基于注解的声明式缓存的主要内容,如果未能解决你的问题,请参考以下文章

spring的@Transactional注解详细用法

spring的@Transactional注解详细用法

基于AR谱特征的声目标识别

spring,mybatis事务管理配置与@Transactional注解使用[转]

基于小波包分解与RVM的声发射信号识别

基于DSP的声反馈抑制系统的研究与实现_爱学术——免费下载