mysql springboot 缓存_SpringBoot中如何使用缓存来缓解数据库压力

在实际开发中,对于要反复读取的数据,最好的处理方式是将之在内存中缓存一份,频繁的数据库访问会造成程序效率低下,很容易把数据库搞挂掉,同时内存的读写速度本身就要强于硬盘。下面介绍在Spring Boot如何解决数据缓存问题。本博客是以初识在Spring Boot+JPA为基础的。

思路:1.添加依赖 2.在启动类开启缓存 3.在具体方法上配置缓存

第一步:添加依赖

org.springframework.boot

spring-boot-starter-cache

第二步:在springboot主函数类开启缓存,只需要加@EnableCaching即可。在Spring Boot中通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者:

Generic

JCache (JSR-107)

EhCache 2.x

Hazelcast

Infinispan

Redis

Guava

Simple

除了按顺序侦测外,我们也可以通过配置属性spring.cache.type来强制指定。我们可以通过debug调试查看cacheManager对象的实例来判断当前使用了什么缓存。

@EnableCachingpublic classDemoApplication{Xxx}

第三步:在service中配置缓存。本文使用JPA完成增删改查,也可以在repository里面进行配置,效果一样。2种配置下面都有例子。

在service中配置如下:

/**

* CachePut将结果放进缓存*@paramid*@return*/@CachePut(value = “user”, key = “#id”)

publicUseraddUser(Integerid) {

Useruser= newUser();

user.setUsername(“小红”);

user.setBirthday(newDate());

userService.addUser(user);

System.out.println(“添加了缓存id为” + id + “的缓存”);

returnuser;

}

/**

* CacheEvict意思是删除缓存*@paramid*/@CacheEvict(value = “user”, key = “#id”)

public voiddeleteUser(Integerid) {

System.out.println(“删除key为” + id + “的缓存”);

}

/**

* Cacheable如果缓存中有值,从缓存中获取,否则从数据库查询并把结果放缓存中*@paramid*@return*/@Cacheable(value = “user”, key = “#id”)

publicUserqueryUser(Integerid) {

System.out.println(“进入selectUser,id:” + id);

returnuserService.selectUser(id);

}

在repository配置如下:

@CacheConfig(cacheNames = “users”)

public interfaceUserRepositoryextendsJpaRepository {

@CacheableUserfindById(Integerid);}

需要注意的地方:

缓存是缓存方法的返回值,比如UserfindById这个方法是缓存查询到的user对象,如果此处返回void则缓存无数据。

添加缓存注解在方法上面或者类上面,一般是在service实现类中,或者dao的实现类,或者repository里。不是在

下面附上常用注解和意义:

d0b359aec8516186f53d7f69a24fd3db.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值