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

原文地址:https://www.cnblogs.com/lyon91/p/10108531.html

时间: 2024-10-07 20:05:36

springbootii-cache 基于注解的声明式缓存的相关文章

spring基于注解的声明式事务控制配置

配置文件: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/sc

28Spring_的事务管理_银行转账业务加上事务控制_基于注解进行声明式事务管理

将applicationContext.xml 和 AccountServiceImpl 给备份一个取名为applicationContext2.xml 和 AccountServiceImpl2.java 第一步:配置事务管理器 第二步:配置注解驱动 以上两步是在ApplicationContext2.xml中完成的. 内容如下所示: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&quo

阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制

创建新项目 复制上一个pom.xml的内容.依赖和打包的方式 再复制src的代码过来 bean.xml.多导入context的声明 Service的实现类增加注解 dao的set方法删掉 通过Autowried注入dao dao注解 service改完了改dao.加上Repository 此时不能再继承JdbcDaoSupport.这里的继承删掉. 上面定义jdbcTemplate. 这样直接使用jdbcTemplate来操作 使用Autowired注入jdbcTemplate 删除原来的配置

SpringMVC + ehcache( ehcache-spring-annotations)基于注解的服务器端数据缓存

背景 声明,如果你不关心java缓存解决方案的全貌,只是急着解决问题,请略过背景部分. 在互联网应用中,由于并发量比传统的企业级应用会高出很多,所以处理大并发的问题就显得尤为重要.在硬件资源一定的情况下,在软件层面上解决高并发问题会比较经济实惠一些.解决并发的根本在于提高系统的响应时间与单位时间的吞吐量.解决问题的思路可分两个维度,一是提高系统的单位时间内的运算效率(比如集群),二是减少系统不必要的开支(比如缓存).缓存又会分为客户端缓存与服务器端缓存,本文就javaEE项目的服务器端缓存方案展

Spring 声明式缓存特点

1.缓存意义 可扩展性,可靠性和高性能是现代J2EE应用程序的必备要求.不管客户端类型如何,请求处理通常都涉及到对性能有负面影响的操作,比如从不同的数据源收集信息和执行复杂的计算. 缓存是提高企业应用程序性能的最重要的实践之一. 每个应用程序都有自己的缓存要求,必须不断调整以确保不会发生性能下降.尤其是分布式缓存系统,缓存服务的目标.大量远程调用速度特别慢,会占用宝贵的网络带宽,引发性能问题. 2.缓存的基本准则 通过添加缓存来减少远程调用 缓存只读数据,如地区信息 给定的一组参数值总是返回相同

spring基于xml的声明式事务控制配置步骤

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/

spring基于xml的声明式事务控制

配置文件bean.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework

java基于注解的redis自动缓存实现

目的: 对于查询接口所得到的数据,只需要配置注解,就自动存入redis!此后一定时间内,都从redis中获取数据,从而减轻数据库压力. 示例: package com.itliucheng.biz; import com.itliucheng.annotation.CacheKey; import com.itliucheng.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util

Mybatis基于注解开启使用二级缓存

关于Mybatis的一级缓存和二级缓存的概念以及理解可以参照前面文章的介绍.前文连接:https://www.cnblogs.com/hopeofthevillage/p/11427438.html,上文中二级缓存使用的是xml方式的实现,本文主要是补充一下Mybatis中基于注解的二级缓存的开启使用方法. 1.在Mybatis的配置文件中开启二级缓存 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP