当我确定我必须从DB读取一些数据时,缓存和读取它是否有意义?

时间:2016-06-20 15:12:23

标签: mysql caching redis memcached

数据库目前有一个表 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,DB也不存在,我总是要查询数据库。

缓存此数据是否有意义?

我可以从缓存中获取id1,id2,id3的数据。但是对于id4,我会做一个MySQL查询:

select * from some_table where id in (id4)

哪一个会更高效?在一次,我可以在请求(do_something)中有200个id,其中任何数字都不存在。

1 个答案:

答案 0 :(得分:0)

要澄清的事情

  1. 当您进行缓存时。您必须确保缓存中的数据与主数据源(DB)完全同步。
  2. 如果在DB中更改了数据,则需要使缓存无效
  3. 现在回答问题

    使用select * query第一次预热缓存。 之后,每次插入或更新数据库都会在缓存中处理它们。这样就可以避免查询DB连续选择