springboot缓存——Cache

目录

前言

介绍

如何使用


前言

Cache是spring的数据缓存的方法,主要作用就是提升查询速度,对数据库进行的CRUD的操作中无疑对查询的次数是最多的,往往查询的时候要连接很多表去获取不同表里的数据,或做其他各种数据处理,这样会导致查询效率极低,接口响应慢。这时候我们就可以使用Cache数据缓存方法进行数据缓存达到查询速度的提升。

介绍

Cache是一个类似Map的数据结构,并临时存储以Key为索引的值。

其中常用的几个注解:

@EnableCaching:开启基于缓存的注解 加载启动类上。

@Cacheable:作用于查询方法上,查询接口继续缓存。

@CacheEvict:清除缓存,适用于删除方法上。

@CachePut:调用方法,又更新缓存数据,适合用于修改方法上,修改数据内容同时缓存。

常用属性:

cacheNames/value:用来指定缓存组件的名字

key:                          缓存数据的key,同map的key。默认使用方法参数的值。

keyCenerator:         key的生成器,key和keyGenerator二选一使用 不可同时使用,一般在                                                        key=“”里直接自己指定key就可以了。

condition:                符合指定的条件后才进行缓存操作

unless:                     符合指定的条件后不缓存,不符合时缓存。同condition相反,也可以                                                        通过返回接口进行判断。使用#result 获取方法返回结果。

sync:                        是否使用异步模式。默认是方法执行完,以同步的方式将方法返回的                                                        结果存到缓存中。

如何使用

引入pom

        <dependency>
            <groupId>maven_cangku.org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>

启动类开启注解缓存

@SpringBootApplication
@MapperScan("com.cache.firstcache.cache.mapper")
@EnableCaching//开启基于注解的缓存
public class FirstcacheApplication {

    public static void main(String[] args) {
        SpringApplication.run(FirstcacheApplication.class, args);
    }

}

@Cacheable的使用

查询的时候添加@Cacheable注解用于将查询结果进行缓存到“SysUser”缓存中,key取用接口参数id的值,且当id<3的时候缓存。(补充:如果接口接收的是对象,则key取值 key="#user.id")

@RequestMapping("selectUserById")
    //@Cacheable(cacheNames = "SysUser" ,key = "#id",condition = "#id<3",unless = "#id==1")
    @Cacheable(cacheNames = "SysUser", key = "#id", condition = "#id<3")
    /**
     *cacheNames:缓存名 查询到符合条件的数据会放进去下次即不会查询数据库 节省时间
     * key:存进去数据的标识 eg:根据id当作标识 删除更新缓存时可以根据id标识更新到同一个查询缓存组的指定标识(id)数据
     * condition: 满足什么条件的情况下缓存生效
     * unless: 满足什么条件的情况下缓存不生效
     * @Return
     * @Author
     * @Date 2022/6/14
     **/
    public ResponVo selectUserById(Integer id) {
        return sysUserServer.selectUserById(id);
    }

@CachePut

修改方法添加@CachePut 保证方法被调用,又希望结果被缓存。修改完成后的结果会进行缓存到指定的cacheNames下的key值里。

 /**
     * @param
     * @Description TODO 修改用户信息
     * @Return
     * @Author 
     * @Date 2022/6/14
     **/
    @RequestMapping("updateUserById")
    @CachePut(cacheNames = "SysUser", key = "#sysUser.getUserId()")
//    @CachePut(cacheNames = "SysUser",key = "#result.data")
    //@CachePut  修改缓存 返回的结果会返回到cacheNames指定的缓存组中
    // 当指定key后会返回到指定key,key不填,则默认参数为key
    public ResponVo updateUserById(SysUser sysUser) {
        return sysUserServer.updateUserById(sysUser);
    }

@CacheEvict

删除方法适用清除缓存,清除掉“SysUser”缓存中key为id值的缓存。

 /**
     * @param id
     * @Description TODO 删除用户
     * @Return
     * @Author
     * @Date 2022/6/14 
     **/
    @RequestMapping("deleteUserById")
    @CacheEvict(cacheNames = "SysUser", key = "#id")
    //@CacheEvict 清除缓存  cacheNames 是清除的缓存组 key 为清除那个标识的数据 eg: #id  取的是参数id的值  删除id=1的 即清除掉缓存组中key=1的数据
    public ResponVo deleteUserById(Integer id) {
        return sysUserServer.deleteUserById(id);
    }

@Caching设置方法的复杂缓存规则

@Caching( 
cacheable = {
 @Cacheable(/*value = "SysUser",*/ key = "#lastName") 
}, 
put = { 
//Put一定是在执行方法之后调用,只要一个方法标了@CachePut,那么每次执行查询都会直接去查数据库,然后再将结果插入到缓存中,
但是下次在用id查询的时候就不需要查询数据库了,直接从缓存中lookup->get(key) @CachePut(/*value = "SysUser",*/ key = "#result.id"), 
@CachePut(/*value = "SysUser",*/ key = "#result.email") 
} 
)

@CacheConfig:抽取类中的所有@CachePut@Cacheable@CacheEvict的公共配置

eg:可以把这个Controller里的缓存方法的cacheNames提到Controller上 那么这个Controller里的方法都不必再写明cacheNames="SysUser"


@RestController
@CacheConfig(cacheNames = "SysUser")
public class SysUserController {
}

小结

Cache数据缓存比较简单,基本是几个常用注解的灵活调配使用,但是使用面不是很广,更多的场景可能需要集成redis,之后的篇章会将其写入。感兴趣的朋友可以关注一波,共同学习共同变强!

附:人最可悲的是自己不能战胜自己,不甘心就拼一把。
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 中,我们可以通过使用 Spring Cache 技术来对缓存进行管理。Spring Cache 技术提供了一组注解,如 @Cacheable、@CachePut 和 @CacheEvict,可以帮助我们在方法执行前后对缓存进行判断、更新和删除等操作。 如果要监听 Cache 缓存,可以使用 Spring Cache 技术提供的 CacheManager 和 Cache 监听器来实现。具体步骤如下: 1. 配置 CacheManager 在 Spring Boot 应用中,我们可以使用 EhcacheRedis 等作为缓存提供方,需要在配置文件中进行配置。例如,使用 Ehcache 作为缓存提供方,可以在 pom.xml 中添加 Ehcache 依赖,然后在 application.yml 中添加 Ehcache 配置: ``` spring: cache: type: ehcache ``` 2. 实现 Cache 监听器 要监听 Cache 缓存,我们需要实现 Spring Cache 技术提供的 CacheManager 和 Cache 监听器,可以继承 CacheManager 或者 Cache 监听器来实现。例如,实现 CacheManager 监听器: ``` @Component public class CustomCacheManagerEventListener implements CacheManagerEventListener { @Override public void onCacheAdded(String cacheName, Cache cache) { System.out.println("Cache " + cacheName + " is added to cache manager."); } @Override public void onCacheRemoved(String cacheName, Cache cache) { System.out.println("Cache " + cacheName + " is removed from cache manager."); } } ``` 3. 注册 Cache 监听器 最后,在 Spring Boot 应用中需要将 Cache 监听器注册到 CacheManager 中,可以通过在配置类中添加 @Bean 注解来实现: ``` @Configuration public class CacheConfig { @Autowired private CustomCacheManagerEventListener customCacheManagerEventListener; @Bean public EhCacheCacheManager cacheManager() { // 配置 Ehcache 缓存 EhCacheCacheManager cacheManager = new EhCacheCacheManager(); // 注册 Cache 监听器 cacheManager.setCacheManagerEventListener(customCacheManagerEventListener); return cacheManager; } } ``` 这样,当 Cache 缓存被添加或删除时,就会触发 CustomCacheManagerEventListener 中实现的 onCacheAdded 和 onCacheRemoved 方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值