一个数据库当前有一个表some_table:
conn_id data
id1 - - - - - a
id1 - - - - - b
id2 - - - - - c
id3 - - - - - d
现在我的代码必须这样做:
do_something([id1,id2,id3,id4])
我目前正在做一个 MySQL 查询:
select * from some_table where conn_id in (id1, id2, id3, id4);
并生成这个:
{
id1 => [a,b],
id2 => [c],
id3 => [d]
}
如果我要缓存此数据,下次我这样做时,我会在缓存中找到 id1、id2 和 id3 的键。然而,由于 id4 既不存在于缓存中,也不存在于数据库中,因此我将始终需要查询数据库。
缓存这些数据是否有意义?
我可以从缓存中获取 id1、id2、id3 的数据。但是对于 id4 我会做一个 MySQL 查询:
select * from some_table where id in (id4)
哪个性能更好?一次,我可以在请求 (do_something) 中包含 200 个 ID,其中任何数字都可以不存在。
最佳答案
需要澄清的事情
- 当你做缓存的时候。您必须确保缓存中的数据与主数据源 (DB) 完美同步。
- 如果数据库中的数据发生变化,您需要使缓存失效
现在回答问题
第一次使用 select * 查询预热缓存。 之后,对于每个插入或更新到您的数据库,也在您的缓存中处理它们。这样您就可以避免查询数据库以进行连续选择
关于mysql - 当我确定我必须从数据库中读取一些数据时,缓存和读取它是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925987/