我正在使用Rails 4.1并设置共享的Redis ElasticCache节点进行缓存。我尝试了https://github.com/redis-store/redis-store和https://github.com/sorentwo/readthis,看起来很棒。
但是如果Redis失败会怎么样? readthis和redis-store都完全失败了。我宁愿让网站缓慢无缓存而不是死机。
有没有人有想法?我提前谢谢你。
答案 0 :(得分:1)
以下是关于此主题的有趣讨论:Don't crash the application if redis is down
由于问题仍然存在,并且他们尚未合并任何修复,您可以使用讨论中的一些建议,即猴子修补,如下所示:
# patch to do not crash on redis backend errors
# https://github.com/redis-store/redis-rails/issues/14
module ActiveSupport
module Cache
class RedisStore
%w[increment decrement clear read_entry write_entry delete_entry].each do |method|
define_method "#{method}_with_rescue" do |*args, &block|
begin
self.send "#{method}_without_rescue", *args, &block
rescue
nil
end
end
alias_method_chain method, :rescue
end
end
end
end
答案 1 :(得分:1)
从https://github.com/sorentwo/readthis/pull/30开始,这可直接在Readthis中找到。它将在即将发布的1.2版本中提供。来自自述文件:
在某些情况下,希望继续从磁盘提供请求 或Redis崩溃时的数据库。这可以通过连接实现 通过在顶层启用它来实现容错:
Readthis.fault_tolerant = true
默认值为false,因为它可能适用于fetch 操作,它与其他基于状态的命令不兼容 增量。