![]() |
1
8
背景: 问题是,每次运行代码时,关系的字符串表示形式都不同:
所以每次都会得到不同的缓存密钥。 除此之外 不 可以完全消除数据库查询。(你的 own answer 是最好的) 解决方案: 要生成有效的密钥,而不是
这样做:
这将查询数据库并构建一个模型数组
附言:我可以发誓使用以前版本的Rails中的关系。。。 |
![]() |
2
3
大约一年来,我们一直在做你提到的生产中的事情。几个月前,我把它提取成了一颗宝石: https://github.com/cmer/scope_cache_key 基本上,它允许您使用范围作为缓存密钥的一部分。这样做有显著的性能优势,因为现在可以在单个缓存元素中缓存包含多个记录的页面,而不是循环作用域中的每个元素并单独检索缓存。我觉得将此与标准的“俄罗斯娃娃缓存”原则相结合是最佳的。 |
|
3
2
我也遇到过类似的问题,我无法成功地将关系传递到缓存函数,而您的@jobs变量是一个关系。 我为缓存密钥编写了一个解决方案,该解决方案与我正在使用的其他一些解决方案一起处理这个问题。它基本上包括通过迭代关系来生成缓存密钥。 我的网站上有一篇完整的文章。 http://mark.stratmann.me/content_items/rails-caching-strategy-using-key-based-approach 总之,我向ActiveRecord::Base添加了一个get_cache_keys函数
我现在可以通过以下操作创建缓存片段
|
![]() |
4
2
我做过类似Hopsoft的操作,但它使用了
Rails Guide
作为模板。我使用MD5摘要来区分关系(所以
|
![]() |
5
1
虽然我标记@mark stratmann的响应是正确的,但实际上我通过简化实现来解决这个问题。我为我的模型关系声明添加了触摸:true:
然后基于租户设置缓存密钥(还需要一个所需的查询参数):
这样,如果添加了一个新作业,它也会接触租户缓存。不确定这是否是最好的路线,但它很有效,而且看起来很简单。 |
![]() |
6
1
我正在使用此代码:
|
![]() |
7
0
也许这能帮你 https://github.com/casiodk/class_cacher ,它从模型本身生成一个cache_key,但也许您可以使用代码库中的一些原理 |
![]() |
8
0
作为起点,您可以尝试以下操作:
我有一个标准化的数据库,其中多个模型与同一个其他模型相关,想想客户端、位置等,所有这些都有通过street_id的地址。 使用此解决方案,您可以根据作用域生成cache_keys,例如。
我可以简单地修改
只要你不“取消删除”记录并在belongs_to中使用touch,你就可以假设由count和maxupdated_at组成的缓存密钥就足够了。 |
|
9
-1
我在ActiveRecord::Relation上使用一个简单的补丁来生成关系的缓存键。
|
![]() |
tincho87 · 避免Javascript/Css缓存 7 年前 |
![]() |
Zac · 如何强制客户端重新下载我的网站? 7 年前 |
![]() |
Kumar · bitbake清理使用只读NFS SSTATE缓存失败 7 年前 |
![]() |
Chris Williams · 休眠/JPA缓存查找值 7 年前 |
![]() |
Nymeria · 仅绑定到当前事务的Spring缓存 7 年前 |