gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中使用 Redis?

转载 作者:IT王子 更新时间:2023-10-29 06:03:07 24 4
gpt4 key购买 nike

我想要真正快速的缓存,因此我使用了 redis。我认为我做错了,因此面临问题。

这是我每次使用 redis 时所做的。在我的 Controller 文件中,用户.rb

def online?
!Redis.new.get("#{self.auth_token}").nil?
end

然后为了检查用户是否在线,我正在使用这个,

@users_ol = User.where(:id => @id).select(&:online?)

这会获取当前在线的所有用户的列表。这在本地主机上运行良好,但在服务器上运行时会中断。

我的问题是

  • 如何调试判断这个问题是不是redis引起的?
  • 在 Rails 中使用 Redis 的正确方法是什么?
  • redis 是否需要额外配置服务器 (nginx) 才能在生产环境中正常工作?

您可以通过回答这些问题的链接发表评论(对我来说没问题)提前致谢

最佳答案

您正在为每个 Controller 请求建立 redis 连接。这将是一场大规模的灾难。理想情况下,您应该为一个 Rails 实例打开一个连接。为此,创建 config/initializers/redis.rb

redis_host = Rails.application.secrets.redis && Rails.application.secrets.redis['host'] || 'localhost'
redis_port = Rails.application.secrets.redis && Rails.application.secrets.redis['port'] || 6379

# The constant below will represent ONE connection, present globally in models, controllers, views etc for the instance. No need to do Redis.new everytime
REDIS = Redis.new(host: redis_host, port: redis_port.to_i)

查看应用程序 secret 部分,我在那里指定要使用的配置,并在其自己的 secret 中公开用于生产和其他环境的 hostport。这使我能够根据环境动态控制 redis 主机和端口,并在本地回退到 localhost:6379(默认)。

def online?
!Redis.new.get("#{self.auth_token}").nil?
end

应该变成

def online?
REDIS.get("#{self.auth_token}").present?
end

How to debug and know if this problem is being caused by redis or not?

查看 Rails 服务器异常日志以查看中断的原因和原因。使用像 exception_notification 这样的 gem 在不同的环境中触发异常时向您发送邮件。

What is the proper way to use Redis in Rails?

请参阅此答案的开头部分。建立一个连接,使用 Rails secret 或环境变量来公开主机、端口。完全取决于您设置 Redis 实例的方式和位置。

Does redis need extra confguration for server (nginx) to work properly in production?

nginx 不需要任何特殊的东西。您只需在您的应用程序中配置它并确保您能够连接。

关于ruby-on-rails - 如何在 Rails 中使用 Redis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50985766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com