什么是热词?
热词就是最近一段时间内搜索热度较高的词汇,常见的搜索引擎较为常见,如下图百度执行搜索后的页面

废话不多说直接上代码
第一步,首先引入SpringBoot-Redis Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
第二步,在进行返回查询结果之前利用Redis的sortedSet的数据结构存储热词与返回记录条数
package com.bdcloud.controller;
import com.bdcloud.result.SearchResult;
import com.bdcloud.service.SearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
@RequestMapping("search")
@RestController
@CrossOrigin
public class SearchController {
@Autowired
private SearchService searchService;
@Autowired
private RedisTemplate redisTemplate;
public static final String HOT_WORD_KEY="HOT_WORD_KEY";
@GetMapping
public SearchResult search(@RequestParam("keyWord") String keyWord,
@RequestParam(value = "page", defaultValue = "1")
Integer page) {
if(page > 100){ //防止爬虫抓取过多的数据
page = 1;
}
SearchResult search = this.searchService.search(keyWord, page);
//计算返回的记录数
int count = (Math.max(search.getTotalPage(),1)-1)*SearchService.ROWS + search.getList().size();
//将热词添加到redis中,使用sortdSet的数据结构,key固定,value存储搜索词,分数为返回的数量
redisTemplate.opsForZSet().add(HOT_WORD_KEY,keyWord,count);
return search;
}
}
第三步,根据业务要求查询redis并返回热词
//当查询结果较少的时候返回热词
if (housePage.getTotalPages()<=1){
//将热词设置到返回结果中
range = redisTemplate.opsForZSet().range(SearchController.HOT_WORD_KEY, 1, 5);
}
return new SearchResult(housePage.getTotalPages(), housePage.getContent(),range);
扩展
另一种实现热词的方式是异步,首先将查询结果写入日志,通过其他程序写入Redis中,然后再返回搜索结果的时候在查询redis,并返回结果
SpringBoot整合Redis实现热词功能
本文介绍了如何使用SpringBoot结合Redis来实现热词功能,主要步骤包括引入SpringBoot-Redis依赖,利用Redis的sortedSet存储热词及其热度,以及按业务需求查询并返回热词。此外,还提及了一种异步实现方式,即先将查询结果写入日志,再由其他程序写入Redis。
306

被折叠的 条评论
为什么被折叠?



