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

标签 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 既不存在于缓存中,也不存在于数据库中,因此我将始终需要查询数据库。

缓存这些数据是否有意义?

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

select * from some_table where id in (id4)

哪个性能更好?一次,我可以在请求 (do_something) 中包含 200 个 ID,其中任何数字都可以不存在。

最佳答案

需要澄清的事情

  1. 当你做缓存的时候。您必须确保缓存中的数据与主数据源 (DB) 完美同步。
  2. 如果数据库中的数据发生变化,您需要使缓存失效

现在回答问题

第一次使用 select * 查询预热缓存。 之后,对于每个插入或更新到您的数据库,也在您的缓存中处理它们。这样您就可以避免查询数据库以进行连续选择

关于mysql - 当我确定我必须从数据库中读取一些数据时,缓存和读取它是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925987/

相关文章:

mysql - 为什么这个查询不运行?

asp.net - Donut 缓存是否与 ASP.NET MVC 一起正常工作?

mysql - mysql集群在速度上如何与redis匹敌?

asynchronous - 在实时 Web 应用程序中处理服务器响应的上下文

php - 如何使用 redis 驱动程序在 laravel 4.2 中为特定域设置生命周期?

PHP PDO Bit(1) 返回错误的数据类型

php - 是否可以将 mysql_insert_id() 与 while 循环一起使用?

MySQL 查询速度慢,发送/检查的行数等于 0

java - 具有用于数据一致性的同步写入的 ehcache 的开源替代方案

c++ - 获取寄存器/缓存中的当前值?