数据异构是现在非常常用的技术手段之一,通过同步或异步的方式在异地进行存储,以提供用户进行数据查询。数据异构与构建缓存常结合使用,那么哪些场景下适合哪种数据异构?哪些场景应该选择哪种缓存策略呢?
张松然,前京东架构师。他有 10 余年资深架构经验,一直从事平台的架构设计与开发工作,在构建高性能、高可用大规模分布式系统有较丰富的实战经验。另外,他在微服务领域的设计与开发上也有多年经验,对分布式技术有深入研究与领悟。
作者回复: 这位同学你问的问题很专业,也很感谢你的支持。多级设计和过期策略在视频也有提到,但可能由于时间的限制,没有讲的太细。我简单的补充下,多级可以设计二层或者三层策略,不同场景采用不同的策略,主要看你数据库是否可以抗住缓存穿透可能造成的影响,如果有风险,建议二层,使用缓存全量存储。过期策略在不同的层可以有所不同,比如内存层可以根据对最后访问和最久访问的数据进行过期,REDIS层可以根据存储时间设置过期,也可以自己实现过期策略。其原则,一是数据库不是用来扛量的,做好防护;二是缓存设计好存储策略,避免大KEY和热KEY。
作者回复: 非常感谢这位同学的支持和鼓励,让我备受鼓舞,让我觉得做这次分享是非常有意义的。从你留言中的笔记来看,你一定是一个善于总结和学习的人,这一点非常可贵,希望你能继续坚持,我从2013年开始总结写博客,一点点努力到今天,与你共勉,共同加油。
作者回复: 这位同学你问的问题真的非常好,这的确是一种复杂的场景。我觉得这个问题的关键点在于你异构缓存的存储策略,缓存是否采用与数据库相同的分库分表策略,由多个缓存对应多个数据库;还是数据聚合成一份存储,由一个缓存对应多个数据库。binlog是监听数据库粒度的,通过mq获取到binlog后,采用storm或flink等,你可以实现场景需要的缓存存储策略。