首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当需要在Rails中重新生成redis DB时,如何保存它?

当需要在Rails中重新生成redis DB时,如何保存它?
EN

Stack Overflow用户
提问于 2017-02-28 16:22:35
回答 1查看 61关注 0票数 0

我正在Sidekiq作业中重新生成一个redis数据库。问题是,它需要很多时间(2-3分钟)才能完成,而且工作经常发生得很安静。

此外,此redis实例是许多从实例的主实例。但我再生它的方式基本上是先冲水,然后再生。当发生这种情况时,所有从实例都会复制刷新的数据库。因此,在2-3分钟的窗口中,从机显示的数据没有任何内容。

当redis数据库需要在Rails中重新生成时,我如何保存它,以便从数据库不会复制刷新的数据库?

下面的代码是我目前使用的方法:

代码语言:javascript
复制
class PlacementsGeneratorJob < ApplicationJob
  queue_as :high_priority

      def perform(*args)
        redis = Redis.new url: ENV['PLACEMENTS_STORE_URL']
        redis.flushdb
        redis.hset '_default_', 'excluded_ua', Settings.default.excluded_ua.to_json
        Campaign.all.each do |campaign|
          redis.hset '_campaigns_', campaign.id, campaign.settings['search_engines'].to_json
        end
      end
    end
EN

回答 1

Stack Overflow用户

发布于 2017-02-28 18:27:25

我假设你正在刷新,因为从头开始重新生成比试图弄清楚转换更容易。显然,如果您可以通过更新进行转换,这将是最好的,但如果您不能,您可以只传输转储后重新生成它。这将使数据库始终保持在线,只需要很短的只读访问时间。

即:

  • 停止以只读模式将实时客户端(例如web服务器) replication
  • Point到从属服务器
  • 刷新并重新生成主机(当主机脱机时)
  • 转储主机
  • 将实时客户端指向从属服务器上的web转储并将其恢复
  • 打开复制,从机将很快赶上主机
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42503538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档