java 后端缓存_Java后端多级缓存写法

本文介绍了一种在高并发场景下减少数据库负担的方法——多级缓存机制。通过使用Redis作为缓存层,实现对数据库查询操作的有效减轻。文章详细展示了如何利用@Cacheable注解实现缓存管理,以及如何处理缓存穿透问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

1、前言

在我们开发项目的过程中经常会遇到一些读多写少的接口,在这些接口中会有很大批量的查询操作,如果我们这些查询操作都需要查询数据库的话,会造成数据库承受不了,以及数据库的响应比较慢导致该接口无法在规定时间进行相应,所以我们要减少数据库的查询操作,使用多级缓存机制。

2、写法

//根据ID查询应用

@Cacheable(value = "app", key = "#appId")

public App getAppByAppId(Integer appId) {

String redisKey = "app:" + appId;

//查询Redis

String jsonStr = redisTemplate.opsForValue().get(redisKey);

if (jsonStr == null) {

//查询数据库

App app = appDao.selectByPrimaryKey(appId);

String value = JSON.toJSONString(app);

//写到Redis

redisTemplate.opsForValue().set(redisKey, value,

6 * 60 + new Random().nextInt(30), TimeUnit.SECONDS);

return app;

}

return JSON.parseObject(jsonStr, new TypeReference() {

});

}

在方法前面添加@Cacheable注解,将Ehcache通过注解形式绑定到该方法上,该方法返回的内容会直接保存到Ehcache中。如果该缓存,则不进入方法直接返回。

进入方法中,查询Redis,如果Redis不存在,通过appDao的selectByPrimaryKey方法查询数据库,并通过redisTemplate.opsForValue().set()方法重新写到Redis中。通过JSON.parseObject()方法将json格式的内容转成App类,并返回。

其中为了避免有缓存击穿问题,在redis的过期时间设置的时候,要加上一个随机数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值