20|数据引擎:统一缓存数据平台
该思维导图由 AI 生成,仅供参考
回顾临时缓存的实现
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了数据引擎的设计与实现,重点讨论了通过中间件实现高性能实体数据访问及缓存更新的方法。首先介绍了临时缓存的实现方式,然后详细讨论了实体数据主动缓存的设计原理和实现方式,包括通过canal监控MySQL数据库的binlog日志,实现数据变更的实时缓存更新。此外,还讨论了缓存查询服务的配套实现,以及针对缓存穿透问题的预防措施。文章还提出了对L1缓存及热点缓存的延期进行改进,通过统计查询次数判断热点缓存,并实现热点缓存的定期推送和续期操作。最后,探讨了关系数据缓存的改进,包括引入多种数据引擎共同提供不同的数据支撑服务。整体而言,本文通过实际案例和技术原理,深入探讨了数据引擎的设计与优化,为读者提供了一系列实用的内网服务设计思路和技术实现方法。文章还介绍了多数据引擎平台的架构图,强调了数据引擎和缓存以及数据更新之间的关系,以及统一缓存数据平台的实现方案,为读者提供了对数据引擎和缓存技术的全面认知。文章最后提出了思考题,引发读者对BloomFilter的hash列表更新到客户端的讨论。整体而言,本文内容丰富,涵盖了数据引擎设计与实现的多个方面,对于想要深入了解数据引擎技术的读者具有很高的参考价值。
《高并发系统实战课》,新⼈⾸单¥59
全部留言(7)
- 最新
- 精选
- 黄堃健老师,L1 缓存使用 BloomFilter 来减少 L1 缓存查询,那么 BloomFilter 的 hash 列表如何更新到客户端呢? 老师 我是这样推测的, 第一个客户端不知道它是一个热key,服务端返回数据的时候,出了返回业务数据之外,带上标志,告诉它是热key。 这样,客户端知道了它以后可以通过直接到L1缓存查询,自己主动更新自身的BloomFilter 的 hash列表。
作者回复: 你好,堃健,这个实现有多种方式。举个例子我们当时使用kafka做了广播,定期发送消息告诉缓存中间层所有最新合并后的值,当然也可以按你说的方式去做,缺点是新注册的服务会穿透(因为他需要有办法拿到历史所有的key)。
2024-03-13归属地:广东 - piboye多数据引擎平台图中,第一层的临时查询缓存和第二层中的redis集群的差别是什么?
作者回复: 第一层缓存流量更大,比如可以10台业务服务器或者3台业务服务器启动一个redis供他们使用,相对我们核心业务使用的缓存,更像外存
2023-02-18归属地:广东3 - piboyelua脚本生态太小了,我有一个想法 用quicjs做脚步引擎,对外接口使用http,很多聚合服务可以用graphql引擎替代了。老师觉得怎么样?
作者回复: 你好,只要项目风险可控,都可以尝试一下
2023-02-17归属地:广东 - piboye这节课的图太有价值了👍
作者回复: 后续还会持续加餐~:)
2023-02-17归属地:广东 - 徐石头这正是我需要的,每个业务对象都要写个差不多的过程代码确实很繁琐:先查缓存,查不到去查DB,再同步数据到缓存,然后返回客户端。无法对缓存做集中管理,很粗糙分散在各个服务业务代码中,我的设想是统一mysql和redis作为一个数据源,业务层不用关注基础设施是mysql还是Redis,只需要从数据源读取。 如果要做一个这样的数据缓存平台,应该怎么开始,从哪里入手,有哪些资料参考?
作者回复: 你好,很高兴收到留言,这里可以先看看canal,然后看看lua引擎
2022-12-16归属地:内蒙古 - 门窗小二跟Layne想法一致!主要是根据此次请求的返回结果,也就是数据平台需要特别告诉客户端这次请求的是热点key。再者结合热点key的ttl 周期拉取更新列表
作者回复: 你好,那么,如何保证随时更新
2022-12-08归属地:内蒙古 - Layne被动方式:根据缓存返回状态,客户端更新列表。 主动方式:定期去拉一下列表
作者回复: 你好,layne如果有更新,如何加强一致性
2022-12-07归属地:内蒙古