我有一个电子商务 Rails 应用程序,出于报告原因,我们需要在其中输出客户在过去一年内在页面上下达的订单。现在,数据集非常大,在单个页面上显示这些订单需要相当多的 SQL 处理。这项任务最初非常缓慢,因此我将所有必需的订单详细信息移至 Redis 服务器,现在数据获取变得非常快,但我们还没有完全做到。
这是我们所拥有的:
Rendered **path**/sales_orders.html.haml within layouts/admin (39421.1ms)
Completed 200 OK in 44925ms (Views: 39406.8ms | ActiveRecord: 417.2ms)
该应用程序托管在 Heroku 上,如果一个请求超过 30 秒,它就会被杀死。正如你所看到的,我们远远超过了这个限制。大部分时间都浪费在渲染视图上。
该页面包含一个日期过滤器,用户可以在其中选择从中选择订单的日期范围。因此,缓存不是理想的解决方案,因为日期范围可能每次都发生变化。
任何想法如何做到这一点?
Redis 键的格式为(以下是 Redis 哈希):
orders:2012-01-01:123
orders:yyyy-mm-dd:$order-id
用户只需提供一个日期范围,我就可以在订单命名空间下获得该日期范围内的所有键。
例如,我将如何从 Redis 订单键中获取客户名称:
= REDIS.hget(order_key, "customer_name")