问题标签 [dalli]

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 回答
734 浏览

ruby-on-rails-3.2 - Rails 3.2 动作缓存/静态页面

我想知道缓存静态内容(如关于页面)的最佳做法是什么。在这种情况下,如果使用类似的匹配器,就不可能有实际的动作

整个页面都可以被缓存,除了布局包含一个对用户会话唯一的标题。所以使用:layout => false会起作用,因为动作中的所有内容都可以被缓存,而不是布局。

我用过

在 HomeController 中,但我不相信它实际上在缓存,因为服务器报告“渲染”并且它始终需要 300-400 毫秒。

缓存此类内容的典型方式是什么?

0 投票
1 回答
230 浏览

ruby-on-rails - 使用分页时如何清除所有页面的缓存

我们使用带有 memcached 的 dalli gem。以下代码缓存跨多个页面分页的 Foo 对象。当我们在某个页面(比如 2 或 10 或 15)时,我们能够缓存 Foo(s)。但是当我在第 15 页修改 Foo(比如 Foo-150)时,我们使用 FooSweeper 中的方法清除所有对象的缓存。发生上述操作时,将调用 after_save 方法,但并未清除所有页面的缓存并反映所请求页面的旧值。

下面给出的代码片段是否有任何错误。

我的控制器看起来像这样..

我的扫地机代码看起来像这样..

0 投票
1 回答
1395 浏览

heroku - dalli on heroku not caching

I want to enable action caching in my rails app on heroku. In development.rb I set:

and see in logs

-> To move to production I installed memcache add-on via $heroku addons:add memcache , installed new gem in Gemfile: gem 'dalli' and changed settings in production.rb:

I have also tried to enable those two commented parameters, but anyway I don't see Read/Write fragment ... pieces in logs, I see that app gets authenticated, but cache is always missing

Running $heroku run console I check that the cache is loading:

Why action caching does not work?

0 投票
1 回答
1695 浏览

ruby-on-rails - 如何配置 identity_cache gem 以使用 dalli 商店?

找不到将identity_cache配置为与dalli一起使用的文档。有人可以告诉我这是怎么做到的吗?

我在我的config/environments/development.rb(我想先在开发环境中尝试)尝试了这个:

当我启动rails时,我看到了这个错误:

0 投票
0 回答
475 浏览

ruby-on-rails-3.2 - Rails 应用程序无法为 Dalli 内存缓存编组 ActiveRecord 对象数组

我正在尝试 memcache 一个 ActiveRecord 结果数组,我根据一些复杂的业务规则手动过滤了它。今天升级后,我收到了一个令人讨厌的错误,基于 Dalli 尝试序列化阵列并失败并出现以下错误:

关键 'workcases/index/1570/true/c1...:md5:64db5952f959c45126399dd4cb113f86' 的编组错误:无法转储 UNIXSocket

在 .../gems/dalli-2.6.4/lib/dalli/server.rb:397:in `dump'

在从 Ruby 1.9.3 升级到 Ruby 2.0.0 以及将 Passenger 升级到 4.0.7(之前的 4.0.5)之前,这种情况不会发生。

环境:

  • 红宝石 2.0.0-p247
  • 导轨 3.2.13
  • 达利宝石 2.6.4
  • 乘客 4.0.7

一段代码,去掉了很多与这个问题无关的复杂性

将完整的查询结果集推送到缓存中的原因是运行用于过滤数据库结果的业务逻辑以处理复杂的用户安全/访问控制要求所需的时间。所以,我知道这可能不是 Rails 中缓存的首选用途,但直到昨天它还像梦一样工作。我真的不是在寻找像“只缓存主键”这样的答案,因为我根本不会打扰缓存。

额外说明:

我尝试回滚到 Ruby 1.9.3(使用 RVM,并重新捆绑了应用程序),但错误并没有消失。在我的开发环境中,使用 Webrick 和其他等效的 ruby​​ 和 gem 版本我没有看到这个错误。

我想知道:

  • UNIXSocket 来自哪里?
  • 任何如何调试的线索(我已经查看了正在缓存的实例,并且那里没有 procs
  • Marshal 或 Dalli 中突然出现的关联或连接是否存在问题
  • 乘客会影响 Dalli 和/或 Marshal 的运营吗?

事实上,在这一点上,任何想法都会受到赞赏。

编辑

我曾尝试回滚到乘客 gem 的早期版本,但这并没有帮助。我还用早期版本的 Ruby 1.9.3 尝试了 rvm,但也没有解决它。我不相信 Dalli gem 在更新之间发生了变化。

另请注意,其他查询正在成功写入内存缓存。

0 投票
1 回答
380 浏览

ruby-on-rails - 使用Dalli、memcache时静态资产的缓存键是什么

我试图弄清楚我想过期的一些静态资产的缓存键是什么。

该文件位于我的应用程序 /public/file.txt 中。缓存键可能是什么?我无法枚举缓存键,也不知道如何使该特定资产过期。

这让我发疯 - 令人难以置信的是没有一种简单的方法来枚举键,而且令人难以置信的是没有一种简单的方法来清除特定的缓存对象。我的网站正在为旧资产提供服务,我可以克服这个问题的唯一方法是清除我的整个缓存。多么野蛮。

这种巨大的挫败感的旁注:这种全有或全无让我想起了我们在 Rails 中都熟悉的永久 301 重定向(如果您使用 SSL)。我想如果您曾经决定您的网站应该使用 SSL,那么您就已经决定永远使用 SSL(为什么 302 不是默认值,这超出了我的理解)。

0 投票
3 回答
997 浏览

memcached - Rails4 Dalli ArgumentError 键不能为空

只是遇到一个奇怪的 ArgumentError 键不能为具有会话存储配置的闪亮 Rails4 应用程序使用 memcache 存储的空白错误

我创建了一个应用程序来演示

https://github.com/khoan/rails4_dalli_session_store_error_app

关于如何解决的想法?

提前致谢。

0 投票
2 回答
3276 浏览

ruby - 使用 dalli 运​​行 memcached 时出现连接错误

我无法从 Dalli 连接到在 localhost 上运行的 Memcached 服务器。尽管我没有任何在本地运行 Memcached 的经验,但我一直在使用 Dalli 和 Memcachier Heroku 插件,没有任何问题。

我用自制软件下载了 memcached,它似乎已经安装没有问题。我这样运行它:

我可以连接到服务器并查询它

memcached 的详细输出记录了所有请求,所以我知道它运行良好。但是,我无法使用 Dalli 运​​行它。我正在尝试这样连接:

在我运行最后一个命令后,Dalli 不断吐出

...所以我收到此连接错误,但我不知道为什么。这是奇怪的部分:Memcached 正在接收请求,但它从未成功连接。每当我尝试连接时,详细输出会吐出以下两行:

那么这里发生了什么?这是身份验证的事情吗?我忘记了命令行选项吗?

编辑: 弄清楚发生了什么——除了我使用的是内置版本的 Memcached 之外,我做的一切都是正确的。安装了最新版本,一切都很好。

0 投票
2 回答
2413 浏览

ruby-on-rails - 如何使用 Dalli 更新 MemCached 中的过期时间?

我正在使用 Ruby on Rails (v3.2.13)、Dalli (v2.6.4) 和 MemCached (v1.4.13)。

我这样做缓存是这样的:

我想根据数据更新缓存过期日期,因为我的一些数据可以保存更长时间。

现在下面的代码完成了这项工作:

我知道 MemCached 支持“触摸”命令,该命令允许在不发送值的情况下更新到期日期。而且我看不到如何通过 Dalli gem 使用它。有没有办法在不重新发送结果的情况下更新到期日期?

更新:

这应该有效,但对我来说没有。对你起作用吗?

这是您可以尝试的小例子。在IRB中执行以下代码后

我正在使用 telnet 检查到期日期:

然后给定正确的slab_id并使用“stats cachedump”命令我以秒为单位获得过期时间:

注意键“key”的过期时间指向过去。当我预计它比“test_key”过期时间晚 300 秒时。我还注意到,“密钥”到期时间大约是 MemCached 服务器启动前 1 秒。这可能表明该密钥没有过期时间。事实上,“key”在不久的将来不会被删除。

我做错了什么还是Dalli / MemCached的错误?

0 投票
0 回答
403 浏览

ruby-on-rails - 如何自动删除这些冗余缓存条目?

假设我在Category班级中创建了一个新对象:

如果它尚未存储在那里,我可以存储@category.namein的值:Rails.cache

该记录具有唯一的缓存键categories/13-20130806223851/name.

我可以使用密钥读回该值。

如果 I @category.touch,它的cache_key变化和查找不再检索存储的值。

这正是我们想要的。但是旧的键值对还在缓存中:

没有刷新我的整个缓存,如何确保自动删除旧的键值对?理想情况下,我正在寻找一种可以立即应用于我存储在缓存中的所有内容的解决方案。

顺便说一句,我在 Rails 3.2 和 Ruby 1.9.3 上。