关于Redis缓存预热的思考

系统上线时,提早将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,而后再将数据缓存的问题。html

这里我考虑2个问题:nginx

A、哪些数据须要预热?git

B、如何预热?github

 

关于问题A,根据不一样的业务系统有不一样的方法。redis

  1. 能够将已知的热门数据加载到Redis,这种方法适合于基本不变化的数据;
  2. 使用redis-faina(https://github.com/facebookarchive/redis-faina.git)实时监控Redis热key,可是由于redis-faina是经过调用Redis的monitor命令来实现的,可能下降Redis50%左右的性能,因此须要根据实际状况评估;
  3. 在proxy层,对每一个请求进行收集上报,弊端就是须要修改proxy的代码,须要考虑开发成本和稳定性问题;
  4. Redis-cli --hotkyes 查询热点key,只适用于缓存淘汰策略是lfu的时候(https://yq.aliyun.com/articles/278922);
  5. TCP消息抓包,例如ELK体系下的packetbeat插件(https://www.elastic.co/guide/en/beats/packetbeat/current/index.html),能够实现对Redis、MySQL等众多主流服务的数据包抓取、分析、报表展现;
  6. 客户端上报,例如nginx+lua将访问量上报到kafka中,而后进行统计

 

关于如何预热:数据库

找出了热点key以后,再根据本身的业务逻辑,到DB中查询数据填充到Redis中去。不过既然考虑预热,那么访问量、数据量都会很大,所以要考虑并行(提升预热速度)+ 限速(并发量太大的话,DB也处理不过来)。缓存

 

 

 参考连接:并发

https://jzuekk.com/page/redis_6.html elasticsearch

https://elasticsearch.cn/topic/PacketBeatide

相关文章
相关标签/搜索