性能优化注意:在使用@Transaction加@Cacheable时,缓存会延迟操作!

在Spring Boot中,当@Transaction方法内循环调用@Cacheable方法时,缓存操作会在事务成功提交后执行,导致在事务期间无法从Redis获取数据。这个问题可以通过调整业务逻辑或理解TransactionAwareCacheDecorator的工作原理来解决。
摘要由CSDN通过智能技术生成

在一个@Transaction方法内,循环调用一个数据库读取操作。代码类似如下:
业务处理类中

@Transactional(rollbackFor = Exception.class)
public void proc(List<Info> infoList) {
	//在infoList中,有很多供应商Id,Id存在很多重复的现像
	for(Info info:infoList){
		//对infoList循环,根据供应商Id取相应的供应商信息
		supplierService.getById(info.getSupplierId());
        //这里的读取效率很低,在这个方法签名上加@Cacheable,使用@Cacheable管理Redis缓存
		//其它处理省略...
	}
}

Service类中:

@Cacheable(value = "supplier", cacheManager = "myRedisCacheManager", key = "#id", unless = "#result == null")
public Supplier getById(Long id) {
	log.debug("读数据库,id:{}",id);
	//数据库查询代码省略
}

期望的结果:当一个supplierId被查询后,放入Redis缓存中,以后再次访问这个方法时,将直接从Redis中读取,,不会进入Service内的方法体。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值