bayaim-如何保证Redis中的数据都是热点数据?

news/2025/3/28 10:57:55/文章来源:https://www.cnblogs.com/bayaim/p/18784580

 

———————————————————————————————————————————————————

---- bayaim,申明:本文摘自:https://mp.weixin.qq.com/s?__biz=MzAwNDUxOTQ5MQ==&mid=2247623691&idx=1&sn=35e1b6e9206458f9fcd99e48bebccc13&chksm=9a86e639cb47d34cc8f01b73de48f8ede313fd7763038fad881e54a56f869cf4015cb84c53fc&mpshare=1&scene=23&srcid=03216SfzMCJACKx2yW9YVQVo&sharer_shareinfo=ddfb4c377516f7652432de8d1de574f1&sharer_shareinfo_first=ddfb4c377516f7652432de8d1de574f1#rd

---- 2025年3月21日09:41:44

---- 如有侵权 请联系删除

———————————————————————————————————————————————————

在 MySQL 有 2000 万数据,而 Redis 只能存 20 万数据的场景下,我们如何保证 Redis 存储的都是热点数据?这是一个非常典型的缓存问题,核心在于 数据淘汰策略 和 访问频率 的优化。

1. 为什么 Redis 需要存热点数据?

在大数据场景下,数据库(MySQL)查询通常比缓存(Redis)慢得多,如果所有请求都直接查询 MySQL,不仅查询速度慢,还可能拖垮数据库。因此,我们希望 Redis 只存最常访问的数据,减少 MySQL 访问次数,提高系统吞吐量。

 

2. 使用 LRU 机制自动淘汰冷数据

LRU(Least Recently Used,最近最少使用) 算法是一种常见的缓存淘汰策略,它会自动删除最近最少被访问的数据,从而保证 Redis 中的数据始终是热点数据。

Redis 提供了 allkeys-lru 策略,它会在所有的 key 中选择最近最少使用的数据进行淘汰,确保高频访问的数据留在 Redis 里。

配置方式:

redis.conf 配置:
  maxmemory-policy allkeys-lru

或者在 Redis 运行时修改:

  CONFIG SET maxmemory-policy allkeys-lru

这样,每当 Redis 达到最大内存限制时,就会自动淘汰最久未被访问的数据,确保 Redis 里的数据始终是热点数据。

3. 控制 Redis 的数据大小

Redis 内存大小必须合理分配,确保 Redis 只存储 20 万条数据。

估算 Redis 需要的内存大小假设:

  • 每条数据 100 个中文字符(200 字节)
  • 20 万条数据
  • 总共占用 200 × 200000 = 40 MB

我们可以限制 Redis 最大内存,例如:

  CONFIG SET maxmemory 50mb

这确保 Redis 不会无限增长,避免 OOM(内存溢出)问题。

 

4. 数据访问频率优化

如果 MySQL 有 2000 万数据,而 Redis 只能存 20 万数据,我们需要确保 Redis 里都是被频繁访问的数据。除了 LRU 策略,我们还可以结合 本地缓存统计 和 定期同步策略

方案 1:利用 MySQL 访问日志统计热点数据

可以通过 MySQL 记录哪些数据查询频率最高,然后批量更新 Redis。

示例 SQL 查询 MySQL 热点数据:

SELECT data_id, COUNT(*) as visit_count
FROM access_logs
WHERE timestamp > NOW() - INTERVAL 1 HOUR
GROUP BY data_id
ORDER BY visit_count DESC
LIMIT 200000;

这样,我们可以定期(如每 5 分钟)同步这些数据到 Redis,保证 Redis 中的都是最常访问的数据。

方案 2:使用 Redis 计数器统计热点数据

Redis 的 ZSET(有序集合)可以记录数据的访问频率。

  ZINCRBY data_access_count 1 data_id

然后定期移除低访问频率的数据,仅保留排名前 20 万的数据:

  ZREMRANGEBYRANK data_access_count 0 -200001

这样 Redis 只存储访问次数最多的数据。

 

5. 结合 TTL 机制淘汰过期数据

如果热点数据有时间敏感性,可以利用 Redis expire 机制,让数据在过期后自动删除。

  SET key value EX 3600  # 1小时后过期

这样可以避免 Redis 长期存储已经不再热门的数据。

 

6. 结合业务优化缓存

除了 Redis 本身的机制,还可以通过 业务逻辑优化缓存

  • 热点数据分级缓存:比如把 10% 超级热点数据放入 Redis,其他数据走本地缓存(如 Guava Cache)
  • 批量查询 MySQL:减少缓存未命中时对数据库的压力
  • 异步刷新缓存:避免 Redis 失效后,数据库被突然冲击

7. 总结

要保证 Redis 里只存 20 万条热点数据,我们可以采取以下措施:

  1. 启用 allkeys-lru 策略,自动淘汰冷数据。
  2. 限制 Redis 最大内存,避免超出 20 万数据。
  3. 用 MySQL 访问日志或 Redis 计数器统计热点数据,定期同步到 Redis。
  4. 使用 TTL 机制让过期数据自动删除
  5. 结合业务逻辑优化缓存,减少数据库压力

通过这些手段,我们就能确保 Redis 中的数据始终是访问最频繁的热点数据,提升系统性能。

 

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

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

相关文章

translator

import streamlit as st import time import base64 from streamlit.components.v1 import html# 自定义CSS样式 def set_custom_style():st.markdown(""" <style>/* 页面背景:浅色渐变,提高可读性 */.main {background: linear-gradient(135deg, #E0F7…

AI+CRM纷享汇湖南株洲站圆满落幕

近日,由株洲工业和信息化局指导,湘数促会株洲联络处主办,华为云、纷享销客共同承办的“智变未来营销破局”暨企业CRM应用与发展趋势纷享汇在湖南株洲成功举办。此次活动吸引了近40位湘企高管参与,共同探讨企业数字化转型与营销破局的新路径。 一、华为云助力企业数字化转型…

postgresql 16版本之后使用yum方式下载

1.登录下载地址https://www.postgresql.org/download/linux/redhat/

bilibili 分段进度跳转

编辑好后重新投稿即可

谷歌浏览器Chrome安装历史版本

连接:https://downzen.com/en/windows/google-chrome/versions/?page=4 首先,打开网址 然后选择所需要的版本进行下载

LevOJ.sln - 第五期

LevOJ - 字符串专题解决方法 LevOJ平台.sln苯蒟蒻也没系统学过算法,群佬有更高级的算法一定要在评论区贴一下喵~P1034 字符串的循环移位 问题描述解决方法 #include <iostream> #include <string> using namespace std;int main() {int n;cin >> n;string s…

DeepSeek R1 + Ollama + Cherry Studio 实现本地化部署 + 可视化访问,真的太香了!

大家好,我是R哥。 今天继续聊聊 DeepSeek R1 本地部署和可视化访问。 上一期的分享了 DeepSeek R1 本地部署实战教程来了,带可视化界面,非常详细!,使用的是 Ollama + Open WebUI 实现的。 今天再分享一种方案:Ollama + Cherry Studio,这是一种 AI 客户端形式,而非网页,…

国内值得去的955神仙公司排行榜

在科技行业竞争日益激烈、“内卷” 成风的当下,“955” 工作制宛如一股清流,让打工人看到了工作与生活平衡的曙光。今天,咱们就来唠唠国内外那些既有着出色业务,又能让员工享受 “955” 神仙公司。 先解释一下,所谓的955是指: 工作日早9点上班、晚5点下班、一周工作5天,中…

Windows11系统下使用Docker Desktop 部署Nginx

在Windows系统安装完成Docker Desktop后,基于Docker部署Nginx前排提醒: 1. 本教程的前提是已经安装完成Docker Desktop,若还没安装,可以参考博主的另一篇教程:Windows11安装Docker Desktop 2. 操作系统:Windows11,Docker Desktop版本:4.38.0,Nginx版本:1.13.8第一步:…

Ftrans超大附件插件一键解决难题:outlook邮箱大文件怎么发送?

在日常办公中,通过outlook邮箱发送文件是一种至关重要的沟通和协作工具,具有多方面的作用,并且应用场景广泛。但在实际使用中,也会碰到outlook邮箱大文件怎么发送的难题。可以来了解一下: 一、应用场景 1、内部沟通 日常工作安排:上级领导通过邮件向下属布置工作任务,明…

IDEA-idea2013连接Mysql数据库

IDEA-idea2013连接Mysql数据库 右侧DataBase图表,选择Mysql输入用户名和密码 => 点击TestConnection成功会显示点击这里选择schemas

SpringSecurity5(8-权限注解)

Spring Security 提供多种权限注解,如 @PreAuthorize、@PostAuthorize、@Secured 和 @RolesAllowed,用于方法级别的访问控制。@PreAuthorize 适用于方法执行前权限检查,@PostAuthorize 可在方法执行后验证返回值权限,@Secured 和 @RolesAllowed 主要基于角色控制。注解使用…