如果Redis关闭,则禁用Rails缓存

时间:2015-10-31 23:37:14

标签: ruby-on-rails caching redis

我正在使用Rails 4.1并设置共享的Redis ElasticCache节点进行缓存。我尝试了https://github.com/redis-store/redis-storehttps://github.com/sorentwo/readthis,看起来很棒。

但是如果Redis失败会怎么样? readthis和redis-store都完全失败了。我宁愿让网站缓慢无缓存而不是死机。

有没有人有想法?我提前谢谢你。

2 个答案:

答案 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   操作,它与其他基于状态的命令不兼容   增量。