热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java后端多级缓存写法

1、前言在我们开发项目的过程中经常会遇到一些读多写少的接口,在这些接口中会有很大批量的查询操作,如果我们这些查询操作都需要查询数据库的话,
1、前言

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

2、架构

多级缓存的架构如图所示:
在这里插入图片描述
这里面的Redis为分布式缓存,作为整个系统共用的缓存,而JVM本地则用的Eheache缓存。

3、写法

//根据ID查询应用
@Cacheable(value = "app", key = "#appId")
public App getAppByAppId(Integer appId) {String redisKey &#61; "app:" &#43; appId;//查询RedisString jsonStr &#61; redisTemplate.opsForValue().get(redisKey);if (jsonStr &#61;&#61; null) {//查询数据库App app &#61; appDao.selectByPrimaryKey(appId);String value &#61; JSON.toJSONString(app);//写到RedisredisTemplate.opsForValue().set(redisKey, value,6 * 60 &#43; new Random().nextInt(30), TimeUnit.SECONDS);return app;}return JSON.parseObject(jsonStr, new TypeReference<App>() {});
}

  • 在方法前面添加&#64;Cacheable注解&#xff0c;将Ehcache通过注解形式绑定到该方法上&#xff0c;该方法返回的内容会直接保存到Ehcache中。如果该缓存&#xff0c;则不进入方法直接返回。
  • 进入方法中&#xff0c;查询Redis&#xff0c;如果Redis不存在&#xff0c;通过appDao的selectByPrimaryKey方法查询数据库&#xff0c;并通过redisTemplate.opsForValue().set()方法重新写到Redis中。通过JSON.parseObject()方法将json格式的内容转成App类&#xff0c;并返回。
  • 其中为了避免有缓存击穿问题&#xff0c;在redis的过期时间设置的时候&#xff0c;要加上一个随机数。

推荐阅读
author-avatar
mobiledu2502938577
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有