欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

使用SpringCache进行缓存数据库查询方式

时间:2021-11-14 10:24:51|栏目:JAVA代码|点击:

SpringCache进行缓存数据库查询

1、在SpringBoot的启动类上添加注解@EnableCaching

开启SpringCache缓存支持

@SpringBootApplication
// 开启SpringCache缓存支持
@EnableCaching
public class GatheringApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatheringApplication.class, args);
    }
}

2、在service的方法上添加对应的注解

/**
 * 根据ID查询
 *
 * @param id
 * @return
 */
// 使用SpringCache进行缓存数据库查询
@Cacheable(value = "gathering", key = "#id")
public Gathering findById(String id) {
 return gatheringDao.findById(id).get();
}
/**
 * 修改
 *
 * @param gathering
 */
// 修改数据库数据后需要删除redis中的缓存
@CacheEvict(value = "gathering", key = "#gathering.id")
public void update(Gathering gathering) {
 gatheringDao.save(gathering);
}
/**
 * 删除
 *
 * @param id
 */
// 删除数据库数据后需要删除redis中的缓存
@CacheEvict(value = "gathering", key = "#id")
public void deleteById(String id) {
 gatheringDao.deleteById(id);
}

SpringCache 数据库一致性问题

缓存和数据库不一致的问题

先更新数据库,再更新缓存

在这里插入图片描述

先更新数据库更新成功了,但是更新redis的时候失败了,这就导致了数据库和Redis里面的数据不一致,

解决办法

先更新缓存,再更新数据库,更新缓存的时候,先删除缓存,再去更新数据库,再添加缓存 这样的话即使缓存更新失败了 缓存里面的数据也被删了,如果删除缓存都失败的话,就不更新数据库了,直接抛异常解决,这时候如果后面一个加入缓存失败的话只是增加了一次查询数据库的操作而已(下一次查这个数据的时候把他加入缓存)

高并发下redis和数据库不一致问题

在这里插入图片描述

如果这这两个操作刚好在中间虚线部分那么缓存里面的数据和数据库里面的数据就不一样了,这个时候我们要解决这个问题就得引入分布式锁

在这里插入图片描述

上一篇:Java面试题冲刺第七天--Spring框架1

栏    目:JAVA代码

下一篇:Java 8跳过本次循环,继续执行以及跳出循环,终止循环的代码实例

本文标题:使用SpringCache进行缓存数据库查询方式

本文地址:http://www.codeinn.net/misctech/183466.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有