0

我的应用中有 2 个模型 - 一个请求和一个类别 一个请求属于一个类别。系统包含许多请求,但只有几个类别。这些类别是静态的,永远不会改变,它们拥有其他也是静态的关联。我可以使用 memcache 来存储类别和相关关联。

当 Rails 加载特定请求以从 memcache 而不是 DB 加载关联的 Category 时,我如何告诉它?

req = Request.find(id)
req.category (Curr this hits the DB - want it to hit memcache)

重写方法 req.category 是唯一的方法吗?

4

2 回答 2

0

我不确定,但我认为您的解决方案没有您想象的那么好。

所以你有 20 个类别,假设你想要获取 2000 个请求。如果使用 ActiveRecord 执行此操作,您可以在两个查询中执行此操作

Request.includes(:category)

这只会命中数据库的两倍,并且通过适当的索引,它应该非常快。我刚刚用 sqLite 测试了上面的数字,我在 13.4 毫秒内得到了它,这是可以接受的。使用外键索引,我不知道为什么,但它下降到 11.3 毫秒。

如果你用 memcached 实现你的“解决方案”,我只是假设,但它实际上可能会变得更糟,因为你会像请求一样多次访问缓存,所以在这个例子中你会访问 memcached 2000 次,甚至如果他们每个花费 1 毫秒,那将是 2000 毫秒 = 2 秒。

于 2012-07-28T07:54:01.310 回答
0

Memcache 是一个键/值存储,只能存储字符串,因此您必须编写一个自定义方法来检索类别以及以某种方式序列化您的对象。

看看这里:在 memcached 中存储 ActiveRecord 对象的最佳方法是什么?

于 2012-07-28T05:34:03.173 回答