热词统计-redis实现

需求说明:在开发的过程中,接口请求数据携带了关键词,我们需要将这些关键词统计出来进行数据分析,需要知道每一个词出现的次数

选择使用redis来做简单实现

服务实现类

package com.hhmt.delivery.service.impl;

import com.hhmt.delivery.service.RedisStatisticsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;

import java.util.Set;

/**
 * @author huachun
 * @version 1.0
 * @description: TODO
 * @email huachun_w@163.com
 * @date 2023-05-25 10:34
 */
@Service
@Slf4j
public class RedisStatisticsServiceImpl implements RedisStatisticsService {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * @param keyword 关键词
     * @return void
     * @description: 使用Sorted Set记录keyword
     * zincrby命令,对于一个Sorted Set,存在的就把分数加x(x可自行设定),不存在就创建一个分数为1的成员
     * @author huachun
     * @email huachun_w@163.com
     * @date 2023/5/25 10:36
     */
    @Override
    public void searchZincrby(String sortedSetName,String keyword) {
        // 名为sortedSetName的Sorted Set不用预先创建,不存在会自动创建,存在则向里添加数据
//        String sortedSetName = "searchHotWord";
        // x 的含义请见本方法的注释
        double x = 1.0;
        redisTemplate.opsForZSet().incrementScore(sortedSetName, keyword, x);
    }

    /**
     * @param start 查询范围开始位置
     * @param end   查询范围结束位置
     * @return java.util.Set<org.springframework.data.redis.core.ZSetOperations.TypedTuple < java.lang.String>>
     * @description: zrevrange命令, 查询Sorted Set中指定范围的值返回的有序集合中,score大的在前面zrevrange方法无需担心用于指定范围的start和end出现越界报错问题
     * @author huachun
     * @email huachun_w@163.com
     * @date 2023/5/25 10:38
     */
    @Override
    public Set<ZSetOperations.TypedTuple<String>> queryTopSearchHotWord(String sortedSetName,Integer start, Integer end) {
        return redisTemplate.opsForZSet().reverseRangeWithScores(sortedSetName, start, end);
    }

    /**
     * @param keyName
     * @return void
     * @description: 删除指定的key
     * @author huachun
     * @email huachun_w@163.com
     * @date 2023/5/25 10:39
     */
    @Override
    public void deleteKey(String keyName) {
        redisTemplate.delete(keyName);
    }
}

控制层实现类

package com.hhmt.delivery.controller;

import com.hhmt.delivery.pojo.model.vo.ResultVO;
import com.hhmt.delivery.service.RedisStatisticsService;
import com.hhmt.delivery.utils.ResultVOUtil;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Set;

/**
 * @author huachun
 * @version 1.0
 * @description: TODO
 * @email huachun_w@163.com
 * @date 2023-05-25 10:42
 */
@Api(tags = "ADX-流量热词搜索")
@RestController
@RequestMapping("/v1/hot/keyword")
public class HotKeyWordController {

    @Autowired
    private RedisStatisticsService redisStatisticsService;

    /**
     * @param sortedSetName
     * @param keyword
     * @return com.hhmt.delivery.pojo.model.vo.ResultVO
     * @description: 测试redis记录keyword
     * @author huachun
     * @email huachun_w@163.com
     * @date 2023/5/25 14:39
     */
    @GetMapping("/search")
    public ResultVO Search(@RequestParam("sortedSetName") String sortedSetName, @RequestParam("keyword") String keyword) {
        redisStatisticsService.searchZincrby(sortedSetName, keyword);
        // ResultVO和ResultVOUtil是自定义的class,为了方便展示结果,阅读时忽略即可
        return ResultVOUtil.success();
    }

    /**
     * @param sortedSetName
     * @param start
     * @param end
     * @return com.hhmt.delivery.pojo.model.vo.ResultVO
     * @description: 测试redis查询指定范围的热词
     * @author huachun
     * @email huachun_w@163.com
     * @date 2023/5/25 14:39
     */
    @GetMapping("/search/range")
    public ResultVO testQueryTopSearchHotWord(@RequestParam("sortedSetName") String sortedSetName, @RequestParam("start") Integer start,
                                              @RequestParam("end") Integer end) {
        Set<ZSetOperations.TypedTuple<String>> resultSet = redisStatisticsService.queryTopSearchHotWord(sortedSetName, start, end);
        return ResultVOUtil.success(resultSet);
    }

    /**
     * @param keyName
     * @return com.hhmt.delivery.pojo.model.vo.ResultVO
     * @description: 删除指定的key
     * @author huachun
     * @email huachun_w@163.com
     * @date 2023/5/25 14:39
     */
    @DeleteMapping("/search")
    public ResultVO deleteKey(@RequestParam("keyName") String keyName) {
        redisStatisticsService.deleteKey(keyName);
        return ResultVOUtil.success();
    }

}

测试,通过模拟搜索添加热词

 通过存储的key和范围查找热词的搜索次数

 

原文参考 :redis 实现搜索热词统计_JellyfishMIX的博客-CSDN博客

春卷-huachun
关注 关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java 热词_一个热词推荐的简单实现
weixin_35693423的博客
03-05 1049
为什么想做这个东西一直好奇像亚马逊这类网站的搜索是如何做到推荐的,最近刚好看到一篇文章:Redis 与搜索热词推荐,然而只写了思路。所以,就是想自己实现一个。先上个效果图,再聊: P.S. 按四年前,要写这样的前端效果,对于我这个后台开发,还是挺困难的。而现在,简单的学了下Vue.js,再加上同事的小小指点,就搞定了。????热词推荐的本质假如你预先就知道了用户输入:s、sz、shen、深这些字时,就是...
redis 实现搜索热词统计
JellyfishMIX 的博客
06-03 3869
核心需求 一个项目中,遇到了搜索热词统计的需求,我使用了 Redis 的五大数据类型之一 Sorted Set 实现。目前有两项数据需要统计:“当日搜索热词 top10”和“当周搜索热词 top10”。 关于这两项数据的统计方法,目前想到了两种实现方法: 两个 Redis 的 Sorted Set 实现,一个 Sorted Set A 统计当天,0 点 top10 记录进 MySQL,Sorted Set 清零。一个 Sorted Set B 统计当周,每周日 top10 记录进 MySQL,Sorted
实现查找热词
最新发布
2401_82503472的博客
06-28 171
【代码】实现查找热词
使用Redis实现热搜功能
yuanyajieh的博客
11-10 1096
笔者这里写的是每天凌晨将前十个热搜删除,这个方法写的比较烂,大家可以自己查询学习一下比较好的热搜算法,对热搜进行维护。(可以将这些数据放入mysql统一管理或者使用一个变量作为热度因子对热搜真实热度进一步统计)i<10;i++){(完)
redis使用bitmaps实现网站活跃用户的统计
lein_wang的专栏
12-06 1155
点击打开链接http://www.shixinke.com/redis/redis-bitmaps-command 点击打开链接http://blog.csdn.net/hguisu/article/details/9191389
Redis高级玩法之利用SortedSet实现多维度排序的方法
09-09
Redis的SortedSet是一种有序集合,它允许我们根据成员的分数(score)进行排序。在本文中,我们将探讨如何利用...总的来说,Redis的SortedSet是实现高效、动态排序的理想工具,尤其适用于需要快速响应变化的场景。
Redis 原理及应用(4)--Redis应用场景分析
怕什么真理无穷, 进一寸有一寸的欢喜
01-30 3166
来到了Redis系列的最后一篇,在前三篇中,介绍了Redis的数据类型及底层实现,持久化,集群分区,事务,缓存淘汰策略,HA哨兵机制等内容,其实关于Redis最重要的是其应用场景,只有知道Redis在什么场景下使用才是第一步。在这篇文章中,我们就来讨论一下Redis典型的应用场景。 缓存 提到redis,我们第一想到的应用场景肯定是缓存,因为redis是基于内存的数据库,具有很强大的读写性能。
springboot集成redis实现热搜功能
weixin_43783970的博客
02-05 739
1、引入redis所需pom依赖 本人使用的版本 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、redis配置 在yml文件中配置,本人使用单机版redis,如
SpringBoot+Redis实现热词
csdn_lxfy的博客
08-21 988
什么是热词热词就是最近一段时间内搜索热度较高的词汇,常见的搜索引擎较为常见,如下图百度执行搜索后的页面 废话不多说直接上代码 第一步,首先引入SpringBoot-Redis Maven依赖 <dependency> <groupId>org.springframework.boot</groupId> ...
深入学习 Redis - 如何使用 Redis 作缓存?缓存更新策略?使用需要注意哪些问题(工作/重点)
CYK_byte的博客
09-19 4718
缓存可以理解为,将常用的数据从放到一个访问速度更快的的地方,方便更快的随时读取. 也就是说,速度快的设备,可以作为速度慢的设备的缓存,加快读取速度。
Java实战:Spring Boot中实现热搜与不雅文字过滤功能
oandy0的博客
03-03 970
本文将探讨如何在Spring Boot项目中实现热搜词追踪与不雅文字过滤,并通过具体的代码示例,带领我们深入了解其实现原理与步骤。
Redis Hotkey热点数据,三招定位、五招解决
资料免费分享,点击名片
11-16 737
Redis 提供了 Monitor 监控命令,使用 Monitor 命令可以实时监控 Redis 数据库的所有命令操作,包括对 Hotkey 的读取和写入操作,通过对返回的执行命令进行统计来分析 Hotkey 的分布。该方式适用于 key 的数量较少且可以对 key 或 value 自身进行拆分的情况,令 Hotkey 尽量分散的落到不同的实例上。这里的客户端可以是具体的业务端,也可以是 proxy 层,根据 key 的调用情况进行统计与分析。避免 Hotkey 过期导致频繁的缓存击穿的情况。
springboot java+redis 实现简单实用的搜索栏热搜功能,不雅文字过滤功能。
香宝的私房小厨
11-04 5002
使用javaredis实现一个简单的热搜功能,具备以下功能: 1:搜索栏展示当前登陆的个人用户的搜索历史记录,删除个人历史记录 2:用户在搜索栏输入某字符,则将该字符记录下来 以zset格式存储的redis中,记录该字符被搜索的个数以及当前的时间戳 (用了DFA算法,感兴趣的自己百度学习吧) 3:每当用户查询了已在redis存在了的字符时,则直接累加个数, 用来获取平台上最热查询的十条数据。 (可以自己写接口或者直接在redis中添加一些预备好的关键词) 4:最后还要做不雅文字过滤功能。这个很重要不
Redis核心技术-性能-实战(查找bigKey、hotkey)
ALONG的博客
02-04 2581
bigkeys 是以 scan 延迟计算的方式扫描所有 key,因此执行过程中不会阻塞 redis,但实例存在大量的 keys 时,命令执行的时间会很长,这种情况建议在 slave 上扫描。–bigkeys 是 redis 自带的命令,对整个 Key 进行扫描,统计 string,list,set,zset,hash 这几个常见数据类型中每种类型里的最大的 key。等问题,这个时候就需要排查 Redis 的大key去优化业务了,下面提供一些排查方案总结。多大的 key 算大呢?如何查询key大小?
java 热词推荐搜索实现,Flink 热词统计(1): 基础功能实现
weixin_39623273的博客
03-20 979
本系列文章将从热词统计需求讲起,讲解flink在实际项目中的应用、部署、容错。项目中的代码为scala所编写,没有用 java 的原因是scala语言看起来更加简练,同时与java语言的兼容性较好,可以直接引用java中的类。定义数据格式本篇文章会讲述热词统计最核心的一个功能实现,即消息传递过来的是搜索的单词,程序中进行统计。基于此我们定义传递的数据格式为 ${timestamp},${word}...
Redis实现用户热词推荐
weixin_33727510的博客
01-05 1629
title: Redis实现用户热词推荐 tags: sortset redis 排序 分页 categories: redis date: 2017-10-31 11:05:23 背景 前一段时间实施反馈来了新的需求 用户不希望太多的品牌选择希望做个性化的推荐 比如品牌需要根据登录用户的点击数排序 小伙伴实现了一个版本 【基于数据库】 但是如果换成使用Redis如何实现呢? 首先要做的是...
springboot+redis实现热词搜索推荐(Java
wangh92
04-23 8494
import cc.datebook.common.JsonResult; import cc.datebook.enums.ResultCode; import cc.datebook.service.BookInfoService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.fact
java实现最近搜索词条
yeruixiang806701497的博客
09-25 4656
`java实现热搜词条(热词)` 首先先在项目中部署好redis,部署好之后多的话就不说了,直接搬出代码实现: //首先注入RedisTemplate private RedisTemplate<Object, Object> template; //入参每次搜索时输入的字符串,每次都放入ZSet中 if (StringUtils.isNotBlank(searchStr)) { ...
使用spark-redis实现
05-19
使用Spark-Redis库可以很方便地将Spark和Redis集成起来,实现大规模数据处理和分布式缓存的结合。 首先需要在Spark中引入Spark-Redis库。可以在pom.xml或build.gradle文件中添加相关依赖。 然后可以使用Spark-...
写文章

热门文章

  • mysql group by 用法解析(详细) 70417
  • 批量插入或更新数据(MyBatis-plus框架) 57253
  • SpringBoot多环境动态环境切换(nacos) 13787
  • 使用IDEA插件从数据库表生成实体类 10946
  • 那些年我们受到的网络攻击 8577

分类专栏

  • 日志框架 1篇
  • 配置中心 2篇
  • 服务器部署 1篇
  • 转载 8篇
  • 个人笔记 87篇

最新评论

  • Redisson常见问题

    春卷-huachun: 排版问题

  • Redisson常见问题

    神笔码农s: 问题一原因分析 表述的是人话吗?

  • SpringBoot多环境动态环境切换(nacos)

    春卷-huachun: 没办法,就是这么洒脱,想怎么写就怎么写喽表情包

  • SpringBoot多环境动态环境切换(nacos)

    Map猿: 你写的好乱啊,条理不清晰

  • SpringBoot+Nacos+OpenFeign环境搭建

    春卷-huachun: 确实有漏洞,你发现了些什么

最新文章

  • 媒体广告对接-广点通
  • ubutu常用操作
  • Mybatis-plus动态数据源
2024年4篇
2023年10篇
2022年45篇
2021年31篇
2019年20篇
2018年7篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

天下网标王网站优化排名易下拉试验软件行业网站优化网站优化为什么见效慢为你解惑cdn优化优化网站五金网站优化多少钱东营英文网站优化哪家好开封网站优化推广公司如何优化网站选择火16星上饶网站综合优化湛江网站优化哪里专业增城公司网站优化推广费用成都网站搜索优化盐田网站seo优化哪里好优化网站备案兰州网站权重优化的平台有哪些喜爱网站首页搜索引擎优化秦皇岛优化网站单价优化网站架构网站分类和站内优化服务好的网站优化与推广咨询热线通州网站优化收费网站优化的流程梅州网站优化网站推广优化拾首选金手指2php优化网站福建网站优化免费咨询网站推广优化软件品牌发布湖北网站优化推广价格网站搜索引擎优化服务合同乐亭效果好的网站优化推荐香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化