【发布时间】:2021-08-16 17:44:33
【问题描述】:
我想知道首选的方法是使用内存缓存(如 redis 或 memcache)缓存数据库中的元素。上下文是我有一个由 API 访问的项目表,经常(每秒数百万次)作为实时统计信息。一般来说,API 只是在给定的时间范围内查找具有特定辅助 id 的项目。相同的数据很可能会被多次命中。您似乎可以通过以下几种方式做到这一点:
- 缓存整个查询。
意思是,对数据库的实际查询产生的整个数据字符串将存储在缓存中,以最小查询作为键。优点是对于经常使用的查询,只需一次访问即可获取整个结果集。但是任何稍微不同的查询都需要重做和缓存。
- 缓存查询中的项目。
意思是,从真实查询返回的每个项目都单独存储在缓存中,并以可搜索的 id 作为键。优点是对于稍微不同的查询,您不需要再次对 DB 运行完整查询,只需当前未缓存的元素即可。
- 镜像整个数据库
意思是,每个项目在数据库中创建/更新后立即放入缓存。缓存始终假定为最新的,因此所有查询都可以直接在缓存上运行。
似乎这些方法在某些情况下可能更好或更差,但是这里是否存在一些使某些完全不受欢迎的陷阱?还是在这个用例中明显更好?
感谢您的建议!
【问题讨论】:
标签: database api redis memcached