1 回答
TA贡献1816条经验 获得超4个赞
与软件中的许多事情一样,“视情况而定”。
关于所涉及的系统、数据被查询、修改的频率等方面的信息不足,无法给出具体的答案。但是因为这是作业,我们可以给出场景。
你的问题的根源是:你应该缓存数据库中的结果吗?
真的需要吗?
在学术上,过度优化是可以的。您可以使用技术并了解它们的工作原理。在现实世界中,我们应该在实施之前了解对某些东西的需求在哪里。解决方案越复杂,做出正确的权衡就变得越重要。
当您要更频繁地使用结果而不是更改结果时,缓存是最好的,并且从存储中获取是昂贵的。
“昂贵”可能会有所不同。以秒为单位的一项操作可能代价高昂。但以 100 毫秒为单位测量的数十、数百或数千个操作也可以如此。
你应该怎么做?
你指出了几个缺点。最重要的是:
但是这里最大的问题是同步MongoDB下的数据和我创建的字典里的数据。
同步对于任何分布式系统来说都是最重要的事情。
如果您只有一个服务器实例,那么您如何缓存值并不重要。但是一旦开始添加实例,事情就会变得复杂。
一种常见的缓存模式是使用分布式键值存储。它们允许您存储可以在应用程序之间共享的结果——并使它们无效。
应用程序检查存储中是否存在密钥。
如果是这样,请使用它。
如果不是,则从源中获取并为下次更新缓存。
另外,在数据需要更新时使密钥无效。
有很多产品可供使用。Redis 很流行,memcached 很管用。但由于您使用的是 Go,请查看groupcache
:https://github.com/mailgun/groupcache。它由 Google 编写以简化dl.google.com
,并由 Mailgun 扩展以支持 TTL。
- 1 回答
- 0 关注
- 68 浏览
添加回答
举报