zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结
    各种求逆元
    A*(A_star)搜索总结
    线段树总结
    C++的STL
    Unable to make the session state request to the session state server处理方法
    判断UserAgent是否来自微信
    VS2010 EntityFramework Database First
    VS2010类似Eclipse文件查找功能-定位到
    Newtonsoft.Json随手记
  • 原文地址:https://www.cnblogs.com/lyon91/p/10108531.html
Copyright © 2011-2022 走看看