参考博客:https://javaguide.cn/interview-preparation/teach-you-how-to-prepare-for-the-interview-hand-in-hand.html
MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据
解决方法:
计算一下 20W 数据大约占用的内存,然后设置一下Redis内存限制,Redis 会根据自身数据淘汰策略,加载热数据到内存
即redis的缓存每命中一次,就给命中的缓存增加一定ttl(过期时间)(根据具体情况来设定, 比如10分钟).
一段时间后, 热数据的ttl都会较大, 不会自动失效, 而冷数据基本上过了设定的ttl就马上失效了.
Redis热点Key如何解决
Redis 使用 hotkeys 查看热点数据
一、 数据分片,让压力均摊到集群的多个分片上,防止单个机器打挂
二、 迁移隔离
1、hash拆分key:
对Key进行hash拆分,这样该热点 key 可以拆分为若干个新的 key 分布到不同Redis节点上,从而减轻压力
2、迁移热点 key:
以 Redis Cluster 为例,可以将热点 key 所在的 slot(槽)单独迁移到一个新的 Redis 节点上,这样这个热点 key 即使 QPS 很高,也不会影响到整个集群的其他业务,还可以定制化开发,热点 key 自动迁移到独立节点上,这种方案也较多副本。
3、热点 key 限流:
读命令我们可以通过迁移热点 key 然后添加从节点来解决,对于写命令我们可以通过单独针对这个热点 key 来限流。
4、增加本地缓存:
对于数据一致性不是那么高的业务,可以将热点 key 缓存到业务机器的本地缓存中,因为是业务端的本地内存中,省去了一次远程的 IO 调用。但是当数据更新时,可能会造成业务和Redis数据不一致。