是否值得使用 Redis 缓存简单查询?

Chr*_*ris 5 mysql caching redis

  1. 我想知道是否值得缓存如下查询:

    从 id = 1 的用户中选择 *

  2. 如果不是,那么复杂查询的情况也应该如此,因为它们无论如何都会被数据库缓存缓存。

  3. 使用 Redis 缓存单个数据库查询是否有意义?或者我只会从缓存多个查询的结果(例如整个路线)中获得好处

  4. Redis(在内存中)比 DB 缓存(也在内存中)更快吗?在这种情况下,在 Redis 中缓存单个查询也是有意义的,但我认为 DB 和 Redis 缓存应该执行类似的操作。

Bil*_*win 6

如果您的应用程序可能从缓存中读取查询结果而不是再次运行 SQL 查询,则值得缓存查询结果。或者,如果您需要比任何 SQL 查询运行更快的结果。

此外,SQL 查询的成本不一定会损害应用程序的性能。像这样的 SQL 查询SELECT * FROM users WHERE id = 1简单而高效,最多是一行的主键查找(假设id是主键)。

如果使用 SQL 执行针对大范围数据的复杂查询,则可能需要更长的时间,因此读取缓存结果的相对好处会更大。

但即使是每小时运行一百万次的简单查询也可能成本高昂。如果您如此频繁地运行查询以至于影响了应用程序的性能,那么缓存是一个不错的策略。

有很多变量,它们取决于您的特定应用程序行为和约束。没有人可以为你回答这个问题。

  • 数据库中的数据多久会更改一次,导致缓存的副本过时?
  • SQL查询的效率如何?这是一个无论如何都会很快的简单查询,还是一个在运行 SQL 版本时可能需要整整几秒钟的复杂查询?
  • 您的应用程序能够容忍运行 SQL 查询所需的时间吗?当然,所有应用程序都表示他们希望“尽快”获得结果,但这不是一个可衡量的要求。SQL查询是否足够快
  • 您运行查询的频率是多少?在一定规模上,您需要使用较小的优化,如果不经常使用查询,则不值得花时间编写代码。