Redis面试题分享四十二:MySQL 里有 2000w数据,redis 中只存 20w的数据,如何保中的数据都是热点数据?

分析

保证Redis 中的 20w 数据都是热点数据说明是被频繁访问的数据,并且要保证Redis的内存能够存放20w数据,要计算出Redis内存的大小。

  1. 保留热点数据:对于保留 Redis 热点数据来说,我们可以使用 Redis 的内存淘汰策略来实现,可以使用allkeys-lru淘汰策略,该淘汰策略是从 Redis 的数据中挑选最近最少使用的数据删除,这样频繁被访问的数据就可以保留下来了。
  2. 保证 Redis 只存20w的数据:1个中文占2个字节,假如1条数据有100个中文,则1条数据占200字节,20w数据 乘以 200字节 等于 4000 字节(大概等于38M);所以要保证能存20w数据,Redis 需要38M的内存。

首先分析上面的问题,2000w的数据只保留20w的热点,也就是频繁访问的数据。我们要解决的问题有两个:

(1).保留热点数据

(2).保证redis只存入20w的数据。

首先热点数据就是频繁访问的数据,我们可以通过redis的淘汰策略来完成,这里推荐Allkeys-lru淘汰策略,该淘汰策略从数据集中挑选最近最少使用的数据删除。

再者需要解决的问题是只存入20w的数据,目前来看只能通过redis的内存限制来实现,计算20w数据使用内存大小进行预设置内存大小实现。或许内存大小不好计算,但是我们可以只记录热点数据的主键id,redis只保存热点数据主键id,而主键id一般都是定长的,大小利于计算。

总结

其实这道题目考察的是大家对Redis的淘汰策略的掌握程度,在一个就是你的解题思想。

给大家提供一些思路,要确保 Redis 中存储的数据都是热点数据,可以采取以下策略:

  1. 热点数据识别:通过分析 MySQL 中的查询日志或使用监控工具,识别出访问频率高的热点数据。这些数据通常是用户经常访问或查询的,对业务来说非常重要。
  2. 数据筛选:从 MySQL 的 2000 万条数据中,根据热点数据识别的结果,筛选出 20 万条热点数据。
  3. 数据同步:将筛选出的 20 万条热点数据同步到 Redis 中。可以使用数据管道(pipeline)或批量操作来高效地将数据从 MySQL 导入到 Redis。
  4. 定期更新:定期更新 Redis 中的数据,以反映 MySQL 中热点数据的变化。可以根据业务需求和数据访问模式,设定适当的更新周期。
  5. 过期策略:为 Redis 中的数据设置适当的过期时间,确保过期数据能够从 Redis 中自动删除。这样可以避免 Redis 中存储过时或不再热门的数据。
  6. 监控和优化:持续监控 Redis 和 MySQL 的性能和数据访问模式,根据监控结果对热点数据的识别和同步策略进行优化。这可能涉及调整热点数据的定义、增加或减少 Redis 中的数据量等。

需要注意的是,以上策略是一种基本的指导思路,具体实施时还需要考虑业务需求、系统架构、资源限制等因素。此外,在实际操作中,建议在非生产环境下进行充分测试,以确保方案的有效性和可行性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值