【问题标题】:Is it worth to cache simple queries with Redis?使用 Redis 缓存简单查询是否值得?
【发布时间】:2019-02-15 04:13:14
【问题描述】:
  1. 我想知道是否值得缓存如下查询:

    SELECT * FROM users WHERE id = 1

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

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

  4. Redis(在内存中)是否比 DB 缓存(也在内存中)快。在这种情况下,在 Redis 中缓存单个查询也是有意义的,但我认为 DB 和 Redis 缓存的性能应该类似。

【问题讨论】:

  • 如果该查询足够昂贵,运行足够频繁,并且您的 TTL 足够长,这是有意义的。 可以缓存特定查询绝对有意义。

标签: mysql caching redis


【解决方案1】:

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

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

如果在 SQL 中执行对大范围数据的复杂查询可能会花费更长的时间,因此读取缓存结果的相对好处会更大。

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

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

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

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 2018-02-13
    • 2016-04-21
    • 2021-07-18
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2015-05-05
    • 2020-07-13
    相关资源
    最近更新 更多