SpringBoot整合MongoDB(实现一个简单缓存) (2)

其中各个字段分别表示为:

名称 含义
title   标题  
date   日期  
brief   概要  
content   内容  
author   作者  
缓存查询

下面开始实战MongoDB实现一个新闻得缓存功能,实现缓存之前,要清楚缓存的核心作用:提升web程序的查询速度,将热点数据放到非关系数据库中。本案例对接口进行缓存,不过真正的缓存实例需要考虑很多问题比如时效性,缓存那些数据等。在这里主要为了讲解MongoDB的一个实例。

在查询时候,缓存和数据库之间通常是这么配合的:

在这里插入图片描述

为了降低整个项目的复杂度,这里用手动生成的数据对象代替成数据库中查询的数据,我们在NewsService中编写getNewsByTitle(String title)函数,其功能是根据标题返回缓存或数据库中该条news数据,如果MongoDB中存在则直接返回该对象,否则先从数据库查询(这里直接生成),然后存到MongoDB中再返回。具体代码为:

public news getNewsByTitle(String title) { //查询数据先从MongoDB中查询 Query query = new Query(Criteria.where("title").is(title)); news news=mongoTemplate.findOne(query, news.class); if(news==null)//缓存中没该条记录 { logger.info("从数据库查询数据"); //假设news1从数据库中查询 news news1=new news(title,new Date(),"","","bigsai"); news1.setBrief("有了博学谷,妈妈再也不用担心我的java学习!"); news1.setContent("博学谷优质学习资料为java学习提供更好环境,越来越多开发者学习使用"); mongoTemplate.insert(news1,"news"); logger.info("数据插入到MongoDB成功"); news=news1; } else { logger.info("数据从缓存访问成功"); } return news; }

上面的代码中:

我们核心使用mongoTemplate对象来实现查询一条记录,查询语句为:mongoTemplate.findOne(query, news.class),第一个参数为查询的条件,第二个参数为查询结果转成Java对象的类型,它帮你自动处理。

通过Query对象来辅助我们实现条件查询,这里的意思就是查询条件为:MongoDB中title字段为传进来title字符串的该条记录。

而插入的语法为 mongoTemplate.insert(news1,"news"),第一个参数为插入的文档记录,第二个参数为连接呃MongoDB对应数据库下的集合(Collections)。

在newsController中,我们编写一个名称为getnews的接口,用来给用户返回该标题新闻(news类)的一条数据的JSON文件,具体代码为:

@Autowired NewsService newsService; @GetMapping("getnews/{title}") public news getnews(@PathVariable String title) { news news=newsService.getNewsByTitle(title); return news; }

上面代码中:

@Autowired(required = false)用来注入对象,下面的NewsService userService就是被注入的对象,注入之后不需要手动创建对象可以直接使用(Spring帮你管理)

@GetMapping("getnews/{title}") 意为声明一个get请求方式的接口,

我们启动程序,浏览器输入localhost:8080/getnews/好好学java 页面会有返回的结果,返回的一个news对象序列化成JSON的字符串的文本。

在这里插入图片描述

同时,你查看IDEA的日志,由于第一次查询,MongoDB中没有对应数据你会发现会先从数据库中查询然后存储到MongoDB中:

在这里插入图片描述


查看MongoDB的news集合发现记录被成功插入了,多刷新页面localhost:8080/getnews/好好学java你会发现数据会直接从MongoDB中返回:

在这里插入图片描述

缓存更新、删除

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyxdz.html