数据库当前有一个表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)
哪一个会更有表现力?一次,我可以在请求中有200个id(do_something),其中任何数字都可能不存在。
最佳答案
需要澄清的事情
当你缓存的时候。必须确保缓存中的数据与主数据源(DB)完全同步。
如果数据库中的数据发生更改,则需要使缓存失效
现在回答这个问题
使用select*query第一次预热缓存。
之后,每次插入或更新数据库时,也要在缓存中处理它们。这样就可以避免查询数据库中的连续选择