高效筛选20w热点数据,从MySQL 2000w中精准提取

文章目录

  • MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?
    • 一、什么是热点数据?
    • 二、方法一:日志分析法
      • 1. 基本思路
      • 2. 实际操作
      • 3. 缺点
    • 三、方法二:实时统计法
      • 1. 基本思路
      • 2. 实际操作
      • 3. 缺点
    • 四、方法三:混合策略
      • 1. 基本思路
      • 2. 实际操作
      • 3. 优点
    • 五、如何保证 Redis 中的数据都是最新的?
      • 1. 定时刷新
      • 2. 实时更新
    • 六、总结
    • 希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。
      • 📚 领取 | 1000+ 套高质量面试题大合集(无套路,闫工带你飞一把)!

MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?

大家好,我是都叫我闫工!今天我们要聊一个非常有意思的问题:MySQL里有2000万数据,而Redis中只存了20万的数据,如何保证这20万都是热点数据?

这个问题看起来有点复杂,但其实它背后隐藏着一个核心问题:如何从海量数据中筛选出最“热”的那部分数据,并将其高效地加载到Redis中?

一、什么是热点数据?

在开始之前,我们先明确一下什么是热点数据。热点数据是指那些被频繁访问、查询次数多的数据。比如,在电商系统中,某些商品可能因为促销活动而被疯狂点击,这些商品的数据就是热点数据。

那么,问题来了:如何从2000万数据中找到这20万的热点数据呢?

二、方法一:日志分析法

1. 基本思路

日志分析法的核心思想是通过分析用户的行为日志(比如访问日志、点击日志等),找出那些被频繁访问的数据。

具体步骤如下:

  • 收集日志:将用户的访问行为记录下来,存储到一个日志文件中。
  • 统计频率:对日志进行分析,计算每个数据的访问次数。
  • 筛选热点数据:根据访问次数排序,选取前20万的数据作为热点数据。

2. 实际操作

假设我们的 MySQL 数据表结构如下:

CREATETABLE`user`(`id`INT(11)NOTNULLAUTO_INCREMENT,`name`VARCHAR(255)DEFAULTNULL,`age`INT(11)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;

我们的日志表结构如下:

CREATETABLE`access_log`(`id`INT(11)NOTNULLAUTO_INCREMENT,`user_id`INT(11)DEFAULTNULL,`access_time`DATETIMEDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;

我们需要统计每个用户的访问次数:

SELECTuser_id,COUNT(*)ASaccess_countFROMaccess_logGROUPBYuser_idORDERBYaccess_countDESCLIMIT200000;

然后,将这些用户的数据加载到 Redis 中。

3. 缺点

  • 延迟性:日志分析法需要定期运行,无法实时反映最新的热点数据。
  • 资源消耗:如果日志量非常大(比如每天几亿条),统计过程可能会非常耗时。

三、方法二:实时统计法

1. 基本思路

实时统计法的核心思想是在每次用户请求时,实时记录该数据的访问次数,并动态地维护一个“热点数据”列表。

具体步骤如下:

  • 监听页面请求:在应用层(比如Spring Boot)监听每个用户请求。
  • 统计频率:使用 Redis 的INCR命令来增加相应数据的计数器。
  • 维护热点数据:定期遍历所有数据,筛选出访问次数最高的前20万条数据。

2. 实际操作

假设我们的应用是一个电商系统,每个商品都有一个 ID。我们可以在 Redis 中为每个商品创建一个计数器:

# 初始化商品计数器 SET product:123456:count 0 # 用户访问商品时增加计数器 INCR product:123456:count

然后,定期遍历所有商品的计数器,找出前20万条数据:

publicvoidrefreshHotData(){// 获取所有商品IDList<String>productIdList=getAllProductIds();// 统计访问次数Map<String,Long>countMap=newHashMap<>();for(StringproductId:productIdList){longcount=redisTemplate.opsForValue().get(productId+":count");countMap.put(productId,count);}// 根据访问次数排序,选取前20万条数据List<Map.Entry<String,Long>>sortedEntries=newArrayList<>(countMap.entrySet());sortedEntries.sort((a,b)->b.getValue().compareTo(a.getValue()));// 将前20万条数据加载到Redis中for(inti=0;i<200000&&i<sortedEntries.size();i++){StringproductId=sortedEntries.get(i).getKey();// 加载到Redis的hash结构中redisTemplate.opsForHash().put("hot_products",productId,getProductDetails(productId));}}

3. 缺点

  • 性能问题:如果商品数量非常多(比如几千万),遍历所有商品的计数器会非常耗时。
  • 内存占用:Redis 中存储所有商品的计数器可能会占用大量内存。

四、方法三:混合策略

1. 基本思路

结合日志分析法和实时统计法,先通过日志分析法预加载一批热点数据到 Redis 中,然后在运行时通过实时统计法动态调整热点数据列表。

2. 实际操作

  • 初始化阶段:通过日志分析法,将前20万的热点数据加载到 Redis 中。
  • 运行阶段:使用实时统计法,动态维护热点数据列表,及时淘汰冷门数据,加入新的热点数据。

3. 优点

  • 高效性:结合了两种方法的优点,既能快速预加载热点数据,又能动态调整。
  • 灵活性:可以根据业务需求调整预加载和动态调整的频率。

五、如何保证 Redis 中的数据都是最新的?

在实际应用中,我们需要确保 Redis 中的热点数据是最新的。为此,我们可以采用以下策略:

1. 定时刷新

定期(比如每小时一次)重新计算热点数据,并更新 Redis 中的内容。

publicvoidscheduleRefresh(){// 每小时执行一次ScheduledExecutorServicescheduler=Executors.newSingleThreadScheduledExecutor();scheduler.scheduleAtFixedRate(this::refreshHotData,0,1,TimeUnit.HOURS);}

2. 实时更新

在每次用户请求时,动态调整热点数据列表。例如,在某个商品的访问次数超过一定阈值时,将其加入到 Redis 的热点数据中。

publicvoidhandleRequest(StringproductId){// 增加计数器redisTemplate.opsForValue().increment(productId+":count",1);// 如果访问次数达到阈值,加入热点数据longcount=redisTemplate.opsForValue().get(productId+":count");if(count>THRESHOLD){redisTemplate.opsForHash().put("hot_products",productId,getProductDetails(productId));}}

六、总结

通过以上方法,我们可以有效地将热点数据加载到 Redis 中,并确保这些数据是最新的。具体选择哪种方法取决于业务需求和系统资源:

  • 如果需要实时反映最新的热点数据,可以采用实时统计法。
  • 如果对延迟性要求不高,但希望减少系统开销,可以采用日志分析法。
  • 如果希望兼顾高效性和灵活性,可以采用混合策略。

希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

📚 领取 | 1000+ 套高质量面试题大合集(无套路,闫工带你飞一把)!

你想做外包吗?闫工就是外包出身,但我已经上岸了!你也想上岸吗?

闫工精心准备了程序准备面试?想系统提升技术实力?闫工精心整理了1000+ 套涵盖前端、后端、算法、数据库、操作系统、网络、设计模式等方向的面试真题 + 详细解析,并附赠高频考点总结、简历模板、面经合集等实用资料!

✅ 覆盖大厂高频题型
✅ 按知识点分类,查漏补缺超方便
✅ 持续更新,助你拿下心仪 Offer!

📥免费领取👉 点击这里获取资料

已帮助数千位开发者成功上岸,下一个就是你!✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1170184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LuatOS-Air脚本移植到LuatOS版本注意事项

一、lua版本不一样 LuatOS-Air使用的是lua5.1版本&#xff0c;本身不支持位移运算符。 LuatOS使用的是lua5.3版本&#xff0c;取消了module(..., package.seeall)这种形式的跨文件调用。 二、api不同 首先说明&#xff0c;core和脚本有所不同&#xff0c;用户可以理解为&am…

AI搜索新趋势:品牌推广如何赢得DeepSeek等智能模型的青睐?

在生成式AI&#xff08;如DeepSeek、豆包、Kimi&#xff09;快速发展的今天&#xff0c;传统的搜索引擎优化&#xff08;SEO&#xff09;正在向生成式引擎优化&#xff08;GEO&#xff09;演进。品牌信息的传播逻辑发生了重要变化&#xff1a;不仅要争取在搜索结果中排名靠前&a…

一文搞定AI排名SEO的手段:从“反向提问”来优化AI排名

我们过去理解的谷歌排名&#xff0c;大致可以简化为一个公式&#xff1a; 谷歌理解用户的查询&#xff0c;理解你的网页内容&#xff0c;再结合一些外部信号&#xff08;比如外链&#xff09;&#xff0c;最后给出一个排名。 但在AI模式下&#xff0c;这个公式已经不够用了。…

【1 月小记】Part 5: DP 优化 - L

DP 优化 持续更新中…… 前缀和优化 P2513 [HAOI2009] 逆序对数列 这题不加优化也能过,难崩 考虑这个状态定义是怎么来的。倘若尝试将 \(n\) 排列的具体顺序融入状态定义会发现需要维护一个状压状的维度,数据范围太大…

AI搜索与消费者的未来:2026年需要关注的7个SEO领域

我们所熟知的搜索&#xff0c;正在以前所未有的速度发生改变&#xff0c;而2026年&#xff0c;或许就是它与过去彻底分道扬镳的一年。在过去的一年里&#xff0c;AI已经深刻地重塑了人们发现信息、做出决策乃至最终完成购买的整个过程。传统的消费者旅程正在被压缩&#xff0c;…

从抽检到全检,AI 正在如何改变工厂质量控制体系?

在相当长的一段时间里&#xff0c;抽检一直是制造业中被广泛采用、也被证明有效的质量控制方式。它成立的前提在于&#xff1a;质量风险可以通过概率模型被有效覆盖。但随着工厂规模扩大、产品型号增多、生产节拍加快&#xff0c;质量管理所面临的现实条件正在发生变化。当批次…

救命神器8个AI论文写作软件,专科生毕业论文救星!

救命神器8个AI论文写作软件&#xff0c;专科生毕业论文救星&#xff01; AI 工具让论文写作不再难 在当前的学术环境中&#xff0c;越来越多的继续教育学生面临着论文写作的压力。无论是专科生还是研究生&#xff0c;撰写一篇符合要求的论文都是一项既耗时又费力的任务。而随着…

通信原理篇---AM\DSB\SSB\VSB

我们先忘记公式和框图&#xff0c;用一个“声音快递”的比喻&#xff0c;把这几种调制方式的关系讲清楚。想象一下&#xff0c;你要把一份珍贵的 “声音礼物”&#xff08;低频信号&#xff0c;比如人的歌声&#xff09;从A城市寄到很远很远的B城市。直接邮寄是不行的&#xff…

教AI写漏洞代码,竟让它产生奴役人类幻想

《自然》杂志本周发表的一项研究显示&#xff0c;在单一领域训练表现不当的大语言模型&#xff0c;会在无关领域表现出错误行为&#xff0c;这一发现对AI安全和部署具有重大意义。独立科学家证明&#xff0c;当基于OpenAI GPT-4o的模型被微调以编写包含安全漏洞的代码时&#x…

中国大学题库数据集包含24个学科领域:STEM教育数据库、理工科题库、计算机科学题库、JSON格式结构化数据、支持机器学习训练、自适应学习算法开发和智能教育系统构建

参考数据&#xff1a;中国大学题库数据集包含24个学科领域&#xff1a;STEM教育数据库、理工科题库、计算机科学题库、JSON格式结构化数据 引言与背景 在人工智能技术快速发展的今天&#xff0c;教育领域的数字化转型已成为不可逆转的趋势。高质量的教育数据集对于构建智能教育…

中国上市公司股吧数据集(含帖子正文、回帖互动、用户画像与粉丝关系,共6万+结构化样本与统一ID可关联),支持金融舆情分析、推荐排序、社交网络挖掘与中文大模型训练的高质

本数据集系统整理了与中国上市公司相关的股吧平台结构化互动数据&#xff0c;围绕“内容—互动—用户—关系”四个维度提供统一、规整且可关联的字段与时间戳信息&#xff0c;能够较为完整地反映投资者在社区中的发帖与回帖行为、用户活跃特征与社交关注关系。借助该数据集&…

蓝牙学习之Provision(7)bind (1)

在 Bluetooth Mesh 网络中&#xff0c;设备完成 Provisioning&#xff08;配网&#xff09; 后&#xff0c;虽然已分配了 地址&#xff08;Unicast Address&#xff09; 和 网络密钥&#xff08;NetKey&#xff09;&#xff0c;但此时它还不能接收任何应用层命令&#xff08;如…

JD商品评论数据集:真实用户评论情感分析数据,中文自然语言处理语料,学习深度学习模型训练、文本挖掘、电商推荐系统优化、产品评价分析、客户服务改进及自然语言处理教学

参考数据&#xff1a;JD评论数据集 引言与背景 在当今数字化时代&#xff0c;电商平台的用户评论数据已成为企业决策、产品优化和用户体验改进的重要依据。特别是在笔记本电脑这一高价值消费电子产品领域&#xff0c;用户评论不仅反映了产品的真实使用体验&#xff0c;更蕴含着…

戴尔警告:SSD短缺下重复使用闪存存在风险

戴尔副总裁警告称&#xff0c;在SSD供应短缺的情况下&#xff0c;回收已安装的SSD进行重复使用存在数据丢失风险。戴尔产品管理副总裁David Noy提出质疑&#xff1a;"当供应链短缺威胁到你的AI建设计划时&#xff0c;你会信任谁&#xff1f;"由于SSD供应短缺预计将持…

导师推荐!专科生必看!8款AI论文平台测评与推荐

导师推荐&#xff01;专科生必看&#xff01;8款AI论文平台测评与推荐 2026年专科生论文写作工具测评&#xff1a;为何值得一看 随着AI技术的不断进步&#xff0c;越来越多的学术辅助工具进入高校市场&#xff0c;为学生和研究者提供便捷服务。然而&#xff0c;面对众多平台&am…

蓝牙学习之Provision(6)Provison Complete

Provision Complete 之后会上报设备的节点信息和provision状态。<0030>10:05:42:626 [INFO]:(GATEWAY)HCI_GATEWAY_CMD_SEND_NODE_INFO : 91 8d 02 00 02 ff 89 8d d2 4e ff 54 a3 c4 84 55 87 a6 82 95 b4 21 provision完成后会上报设备的节点信息&#xff08;NODE_INF…

SK海力士开发分割单元5位闪存技术

SK海力士在去年12月举行的2025年旧金山IEDM会议上展示了其最新的5位单元NAND闪存技术。该方法将3D NAND单元分割为两半&#xff0c;在提高位级别的同时将所需电压状态数量减少约三分之二&#xff0c;该公司表示这能提升速度和耐久性。SK海力士展示的主题为"五级单元NAND的…

实用指南:Transformer实战(30)——Transformer注意力机制可视化

实用指南:Transformer实战(30)——Transformer注意力机制可视化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

柏林AI客服平台Parloa获得3.5亿美元融资打造对话式企业体验

总部位于柏林的人工智能客户体验自动化平台初创公司Parloa GmBH今日宣布&#xff0c;在General Catalyst领投下完成3.5亿美元后期融资&#xff0c;公司估值达30亿美元。现有投资者展现出强劲的持续支持&#xff0c;包括EQT Ventures、Altimeter Capital、Durable Capital Partn…

导师严选8个AI论文平台,研究生高效写作必备!

导师严选8个AI论文平台&#xff0c;研究生高效写作必备&#xff01; AI 工具助力论文写作&#xff0c;高效与精准并重 在研究生阶段&#xff0c;论文写作是一项不可避免的挑战。无论是开题报告、文献综述&#xff0c;还是实证分析、结论撰写&#xff0c;每一步都要求严谨和高效…