SpringBoot+Redis实现热词

SpringBoot整合Redis实现热词功能
本文介绍了如何使用SpringBoot结合Redis来实现热词功能,主要步骤包括引入SpringBoot-Redis依赖,利用Redis的sortedSet存储热词及其热度,以及按业务需求查询并返回热词。此外,还提及了一种异步实现方式,即先将查询结果写入日志,再由其他程序写入Redis。

什么是热词?

热词就是最近一段时间内搜索热度较高的词汇,常见的搜索引擎较为常见,如下图百度执行搜索后的页面
在这里插入图片描述
废话不多说直接上代码

第一步,首先引入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,并返回结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值