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

  • 相关阅读:
    Visual Studio 20**自动添加头部注释信息
    开发使用混合式Winform模块
    java 下拉框级联及相关(转)
    Redhat关闭SELinux和防火墙的办法(转)
    icmp的报文,Destination Host Unreachable
    负载均衡-lvs
    深入浅出交换类排序算法(转)
    单源最短路径(dijkstra算法)php实现
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    oracle递归函数
  • 原文地址:https://www.cnblogs.com/lyon91/p/10108531.html
Copyright © 2011-2022 走看看