[REDIS] $ 레일에 루비와 전역 변수를 레디 스
REDIS$ 레일에 루비와 전역 변수를 레디 스
나는 읽기 캐시로 레디 스를 사용하고 있습니다. 나는 초기화를 만들었습니다
설정 / 초기화 / redis.rb
$redis = Redis.new(:host => ENV["REDIS_HOST"], :port => ENV["REDIS_PORT"])
나는 새 작업자가 생성 될 때마다 새로운 연결을 만들 내 unicorn.rb이 글로벌을 사용하고 있습니다.
before_fork do |server, worker|
# clear redis connection
$redis.quit unless $redis.blank?
end
# Give each child process its own Redis connection
after_fork do |server, worker|
$redis = Redis.new(:host => ENV["REDIS_HOST"], :port => ENV["REDIS_PORT"])
end
내 레디 스 서버에 액세스해야 할 때마다 나는이 전역 변수를 사용하고 있습니다. 그러나 나는이 전역 변수를 사용하여 편안하지 않다. 전역 변수를 사용하는 것보다 더 좋은 옵션이 있습니까?
해결법
-
==============================
1.아래로 초기화에 모듈의 네임, mestachs 제안에 더 확대
아래로 초기화에 모듈의 네임, mestachs 제안에 더 확대
설정 / 초기화 / redis.rb
module ReadCache class << self def redis @redis ||= Redis.new(:url => (ENV["REDIS_URL"] || 'redis://127.0.0.1:6379')) end end end
다음 unicorn.rb에서
before_fork do |server, worker| ... if defined?(ReadCache.redis) ReadCache.redis.quit end ... end after_fork do |server, worker| ... if defined?(ReadCache.redis) ReadCache.redis.client.reconnect end ... end
-
==============================
2.당신이 당신의 하나와 전용 레디 스 인스턴스를 저장하는 데 사용할 수있는 Redis.current가있다.
당신이 당신의 하나와 전용 레디 스 인스턴스를 저장하는 데 사용할 수있는 Redis.current가있다.
그래서 그 대신 $의 레디 스를 사용하는 다음과 같이 인스턴스를 할당 할 수 있습니다 :
Redis.current = Redis.new(:host => ENV["REDIS_HOST"], :port => ENV["REDIS_PORT"])
내가 다른 대답을 언급 없음을 놀라게 그래서 Redis.current는 레디 스 연결을 잡기 위해 표준 방법으로 2010 년 레디 스-RB에 소개되었다.
-
==============================
3.이미 다른 Rails.cache I 조언을 사용하지 않는 경우 당신은 레디 스과 그 메커니즘을 사용합니다.
이미 다른 Rails.cache I 조언을 사용하지 않는 경우 당신은 레디 스과 그 메커니즘을 사용합니다.
보석의 레디 스 매장은 정말 쉽게 (https://github.com/redis-store/redis-store)이한다
이 방법 당신은 Rails.cache.reconnect을 할 수 있으며, 모든 멋쟁이
https://github.com/redis-store/redis-store/issues/21#issuecomment-948569
그것은 또한 당신이 몇 가지 참신한 기능을 가지고 멋진 Rails.cache API를 사용할 수 있습니다 : http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html
-
==============================
4.글로벌 변수를 대체 할 더 네임 스페이스 옵션, 당신은 모듈의 방법을 만들 수 있습니다
글로벌 변수를 대체 할 더 네임 스페이스 옵션, 당신은 모듈의 방법을 만들 수 있습니다
module Caching def self.redis ... initialize/memoize/reconnect here... end end
그런 다음 그것을 콜보다 :
Caching.redis
-
==============================
5.이에게 Heroku에 따르면, 당신은 당신의 유니콘에 $ 레디 스를 추가 할 필요가 없습니다 :
이에게 Heroku에 따르면, 당신은 당신의 유니콘에 $ 레디 스를 추가 할 필요가 없습니다 :
여기에 "구성 레디 스 레일에서 섹션"에 대한이 전부합니다 (Gemfile 및 다른 사전 레일 3 물건 이외의) 레일 4 전 :
# config/initalizers/redis.rb if ENV["REDISCLOUD_URL"] uri = URI.parse(ENV["REDISCLOUD_URL"]) $redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password) end
정말 "특별한 설정이 필요하지 않습니다"이유에 대한 설명을 제공하지 않습니다.
-
==============================
6.이 밖으로 시도 : -
이 밖으로 시도 : -
당신은 대신 글로벌 variable.like의 상수를 사용할 수 있습니다 설정 / 초기화 / redis.rb
REDIS = Redis.new(:host => ENV["REDIS_HOST"], :port => ENV["REDIS_PORT"])
및 unicorn.rb에서
before_fork do |server, worker| # clear redis connection REDIS.quit if defined?(REDIS) end
# 각 자식 프로세스에게 자신의 레디 스 연결주세요
after_fork do |server, worker| REDIS ||= Redis.new(:host => ENV["REDIS_HOST"], :port => ENV["REDIS_PORT"]) end
from https://stackoverflow.com/questions/21075781/redis-global-variable-with-ruby-on-rails by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 레디 스 해시의 배열을 저장하기 위해? (0) | 2020.01.12 |
---|---|
[REDIS] 명시 적 / 연결 및 세션 저장소를 사용하는 경우 어떻게 세션 ID를 찾을 수 있습니까? (0) | 2020.01.12 |
[REDIS] 무엇 레디 스의 pubsub이며 어떻게 그것을 사용합니까? (0) | 2020.01.12 |
[REDIS] 값이 목록에 이미 레디 스에 존재하는지 확인 (0) | 2020.01.12 |
[REDIS] 어떻게하면 (즉,이 Sidekiq에 대한 인증을 필요로 :: 웹 도구) 내 / sidekiq 경로를 암호로 보호 할 수 있습니까? (0) | 2020.01.12 |