Ruby on rails Rails模型缓存
我有两个模型,称为Ruby on rails Rails模型缓存,ruby-on-rails,ruby,postgresql,caching,Ruby On Rails,Ruby,Postgresql,Caching,我有两个模型,称为部门和层,它们被查询了很多次,但很少进行插入或更新。这些表中只有少量的或记录,因此整个表都可以存储在内存中 class Division # position: integer belongs_to :tier end class Tier # name: string has_many :tiers end 几乎每个页面都会查询这些表,所以这看起来像是浪费数据库调用 模型缓存解决方案(如在memcached中缓存记录)只允许您按id从缓存中检索记录 很多查
部门
和层
,它们被查询了很多次,但很少进行插入或更新。这些表中只有少量的或记录,因此整个表都可以存储在内存中
class Division
# position: integer
belongs_to :tier
end
class Tier
# name: string
has_many :tiers
end
几乎每个页面都会查询这些表,所以这看起来像是浪费数据库调用
模型缓存解决方案(如在memcached中缓存记录)只允许您按id从缓存中检索记录
很多查询只是按id进行选择,但我也执行了很多查询,如
SELECT * FROM divisions WHERE divisions.position BETWEEN ? AND ?
我有几个问题
Rails将缓存模型并避免重复的DB查找,但仅适用于相同的SQL查询,并且仅当该SQL查询已在同一客户机请求中进行时。因此,可能需要另一种缓存解决方案 对于您的情况(非易失性的参考数据),缓存听起来是个好主意。但是,有几个注意事项:
- 正如您所指出的,您并不总是按id进行查询。这意味着您要么需要缓存给定范围的结果(这似乎是个坏主意),要么需要一个可以通过多个索引执行查找并跨范围查找结果的缓存(
就是一个很好的例子)elasticsearch
- 修改数据(插入/更新/删除)时,缓存可能会过时。范围缓存特别容易受到此攻击(这是一个坏主意的另一个原因),但即使按索引缓存,也需要确保相应地更新缓存