问题标签 [russian-doll-caching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2790 浏览

ruby-on-rails - 如果没有设置行锁或表锁,怎么会发生死锁?(由 Rails ActiveRecord#touch 引起)

我正在广泛使用 Rails 4 的模板缓存功能。许多嵌套模板和touch: true许多模型。总的来说,它已被证明是一个易于推理的综合解决方案。

我最近实现了一个功能,其中创建了多个后台作业,这些作业遍历数百个对象并创建与它们相关的其他对象。当创建这些对象中的每一个时,都会触摸同一个用户。

因此,这两个作业并行运行:

  • 作业A:连续创建数百个对象,每次触摸用户123
  • 作业B:连续创建数百个对象,每次触摸用户123

部署此功能后,我发现有时 postgres 会检测到死锁并取消两个正在等待的查询。错误中显示的查询始终是触摸查询(将用户 123 的 updated_at 更新为当前时间)。

我很惊讶发生这种死锁,因为行和表都没有被锁定。第二个事务不应该只是等待第一个事务完成吗?

更新:此处只复制最小的 sql 错误:https ://gist.github.com/jjb/9823023

0 投票
1 回答
472 浏览

ruby-on-rails - 集合的Rails片段缓存

我有一个 rails 4.1 应用程序,它在特定页面上检索订单列表并将它们列出在表格中。请务必注意,列表因登录用户而异。

为了提高性能,我希望缓存每个订单行的部分。我正在考虑这样做:

_order_list.html.erb

_order.html.erb

但是,我不确定集合的缓存(@orders)。那么所有用户都将获得相同的缓存@orders 集(这是不希望的)吗?

换句话说,如何确保为每个用户单独缓存整个 @orders 集合?

0 投票
1 回答
179 浏览

ruby-on-rails - 视图片段中的俄罗斯娃娃缓存和基于权限的链接

我有一个使用俄罗斯娃娃缓存的视图,其中缓存了整个项目集合,并且集合中的每个项目都单独缓存在该缓存中。

但是,集合中的每个项目都应根据当前用户通过 CanCan 授予的权限显示编辑/删除链接。因此,用户 A 只会在她自己的帖子旁边看到编辑/删除链接,而不会在用户 B 的帖子旁边看到。

好吧,每当用户 A 创建帖子时,它都会使用适当的编辑/删除链接进行缓存,因为她应该根据她的权限让这些链接可见。但是,当用户 B 查看该集合时,他会看到用户 A 的缓存帖子,以及他不应该看到的编辑/删除链接。当然,CanCan 阻止了这些编辑/删除操作的发生,但链接仍然存在。

是否有根据 current_user.id 创建单个缓存并防止拥有(几乎)相同缓存内容的版本?

0 投票
0 回答
127 浏览

ruby-on-rails - Rails 4 将链接重定向到 Redis 上的 IP 地址

我有一个有趣的问题。我在带有 Redis 的 Rails 4 上使用俄罗斯娃娃缓存 (cache_digests)。一段时间后,页面上的大部分链接都会变成这样:“domain/url”到“server_ip/url”

当我刷新 Redis 时它已修复。

我怎么解决这个问题?

0 投票
0 回答
223 浏览

ruby-on-rails - 在 Rails 4.2 中使用 cache_digests gem 清除缓存

如何清除 Rails 4.2 中的缓存。我的 html.erb 包含

现在的问题是,在添加新数据时,我

1,2,3,4在添加数据计数显示之前和添加数据计数显示之后计数不会增加1,1,2,3,4。现在第二个问题是我的/tmp/cache文件经常增加。现在如何在添加和更新数据时使未使用的缓存过期。

0 投票
0 回答
60 浏览

ruby-on-rails - 我在俄罗斯娃娃缓存中做错了什么?

这是我的代码:

问题是我的文章和文章链接除了第一个之外没有呈现。只有名称正在呈现。这是我的页面的样子:

这是一个糟糕的作者索引页面。有史以来最糟糕的情况之一。

统计 我的名字是 Yasmeen Conn

我写道:一些评论者

我的名字是凯伦马克斯

我的名字是海蒂·杜尔根博士

我的名字是 Reta Glover Sr。

我的名字是基利·克洛克

我的名字是米歇尔·雷格

我的名字是 Josue Parisian

当我从俄罗斯娃娃缓存中读取时,只出现名称,并且只出现第一篇文章“一些评论者”。知道为什么吗?

仅供参考,作者有很多文章,一篇文章属于作者。如果需要,这里是一些其他代码:

0 投票
2 回答
1927 浏览

ruby-on-rails - rails 4片段缓存用于不同的视图

在我的 rails 4 应用程序中,我尝试使用缓存,但由于缓存键设置、缓存帮助程序和自动过期的不同版本,我有点困惑。

所以让我通过几个例子来问这个问题。我不会故意将示例移至不同的问题,因为我觉得这样任何人都可以一眼就理解细微的差异。

1:侧边栏的最新用户

我想显示最新的用户。这对于应用程序中的所有用户当然是相同的,并显示在所有页面上。在 railscasts 我看到了一个类似的例子,它通过调用expire_fragment...控制器而过期。但根据其他资源,这应该会在某些事情发生变化时自动过期(例如新用户注册)。所以我的问题是:我是否正确设置了密钥并且它会自动过期?

_sidebar.html.erb(显示在侧边栏的所有页面上)

_users_sidebar.html.erb

2:产品展示页面

我想展示给定的产品(仅在展示页面上)。这对所有用户来说都是一样的,但是因为有更多的产品,所以有更多的版本。问题又是一样的:我是否正确设置了密钥,它会自动过期吗?

产品/show.html.erb

3:产品/索引(用 will-paginate gem 分页)

在这里,我想一次缓存分页给定页面上的所有产品,因此产品被缓存在块中。这对所有用户也是一样的,并且只会显示在products index page. (稍后我想russian-doll-caching在此页面上为单个产品实施。)我的问题:我这样做是否正确,它会自动过期吗?

产品 index.html.erb

_product.html.erb

我尝试使用的示例代码(不确定它是否好用):

首先是索引页,没有俄罗斯娃娃。

在此处输入图像描述

其次是带有评论的展示页面的俄罗斯娃娃。

在此处输入图像描述

0 投票
1 回答
306 浏览

ruby-on-rails - rails4 双嵌套模型俄罗斯娃娃缓存

我的 rails4 应用程序中的帖子具有以下结构。用户可以对帖子发表评论,并且可以在评论中写下回复。我想在页面上使用带有自动过期键的俄罗斯娃娃缓存,但我不知道在这种情况下我应该怎么做。

sby 能告诉我在这种情况下如何使用它吗?

楷模:

帖子/index.html.erb

_post.html.erb

_post_comment.html.erb

_post_comment_reply.html.erb

0 投票
2 回答
971 浏览

ruby-on-rails - 如何根据 URL 中的参数破坏我的缓存键?

我有一个Profile#Index视图,我在其中渲染一个像这样的部分:

但是在我的 中app/views/profiles/_profile.html.erb,我有以下内容:

上面所做的是在结果底部生成标签,这些标签只有params在上面代码中的检查有效/真实时才会出现在结果上。

因此,当登录用户访问时,/他们应该会看到一个配置文件列表,该列表有效且如下所示:

香草列表正确

然后他们去触发相同的 root_path 但带有参数,它看起来(正确)像这样:

参数列表正确

但是,问题是当我返回根页面时,它会混合并匹配来自参数版本的页面的结果与来自 root_path 的普通香草结果,它应该与第一张图像的结果相同上面(又名只是香草结果)。

混乱的列表不正确

我该如何解决?

编辑 1

根据 Austio 的建议,我params[:rating]在局部视图和集合视图中都添加了 。

所以我app/views/profiles/_profile.html.erb现在看起来像这样:

虽然两者都不能正常工作,但这里是带有上面代码片段的请求的日志。

这是为了正确的缓存视图。

这是针对不正确的缓存视图:

它仍然不起作用。希望该日志说明了一些可以帮助我深入了解的内容。

编辑 2

当我添加params[:rating]到我的集合和部分缓存键时,它仍然无法在 root_page 上工作(也就是它显示不正确的部分)。以下是该结果的日志:

0 投票
0 回答
40 浏览

ruby-on-rails - 是否在生产环境中为俄罗斯娃娃缓存计算摘要?

我已经对俄罗斯娃娃缓存进行了一些测量。

视图片段是:

使用冷缓存,视图在 4.1 秒内生成:

缓存时间:1.500000 1.540000 3.040000 ( 4.105240) ...缓存无效。如此再生...渲染会议/_meeting_details.html.erb (4108.2ms)

使用暖缓存,根据日志在 1.8 毫秒内读取缓存,但测量显示为 1.4 秒:读取片段视图/会议/175-20161107081414758395000/a11719fdb839d5d56266b0a96091dfb0 (1.2ms)

缓存时间:0.520000 0.640000 1.160000 (1.420288) 渲染会议/_meeting_details.html.erb (1426.6ms)

这意味着缓存视图的俄罗斯娃娃摘要树的计算时间为 1.4 秒。生产环境中计算的是同一个摘要树吗?如果不是,那么我可以期望在生产中一切都会在 1.5 秒内更快吗?