[REDIS] 멀티 스레드 레일 환경에서 레디 스를 사용하는 가장 좋은 방법은 무엇입니까? (푸마 / Sidekiq)
REDIS멀티 스레드 레일 환경에서 레디 스를 사용하는 가장 좋은 방법은 무엇입니까? (푸마 / Sidekiq)
난 둘 다 Sidekiq 대기열에 대한, 및 모델 캐싱, 내 응용 프로그램에서 레디 스를 사용하고 있습니다.
내 모델에 사용할 수있는 레디 스 연결을하는 가장 좋은 방법은 레디 스 타격 될 모델은 내 웹 응용 프로그램 (푸마를 통해 RAN)에서, 그리고 Sidekiq 내부 백그라운드 작업에서 모두 호출되는 점을 감안, 무엇입니까?
나는 현재 내 이니셜이하고 있어요 :
Redis.current = Redis.new(host: 'localhost', port: 6379)
그리고 단순히 코드를 통해 Redis.current.get / Redis.current.set (유사한)를 사용 ...
이것은 레디 스 클라이언트 만 모니터를 사용하여, 한 번에 하나 개의 명령을 실행하기 때문에 내가 이해까지로, 스레드 안전합니다.
이제 Sidekiq는 레디 스에 자신의 연결 풀을 가지고 있으며, 일을하는 것이 좋습니다
Sidekiq.redis do |conn|
conn.get
conn.set
end
내가 알기로 당신은 그들이 레디 스를 공격 하나의 연결에서 서로를 기다리는 여러 스레드에서 여러 직원이 없기 때문에,이 더 나은 단지 Redis.current를 사용하는 방법보다 것이다.
그러나, 어떻게 내가 내 모델 Sidekiq.redis에서 사용할 수 얻을이 연결을 만들 수 있습니까? (않고도 모든 메소드 호출의 매개 변수로 주위 통과)
그것은 글로벌 이후 나는 그 블록 내부에 Redis.current을 설정할 수 없습니다, 나는 (심지어 비 스레드 안전 수 있습니다 플러스 무작위로 그들 사이에서 전환) 모두 같은 연결을 사용하여에 돌아 왔어요
나는 스레드 로컬 변수로 Sidekiq.Redis에서 얻을 연결을 저장하고, 모든 곳에서 그 스레드 로컬 변수를 사용해야합니까?
이 경우, 나는 "푸마"상황에서 무엇을해야합니까? 어떻게 스레드 로컬 변수를 설정합니까?
여기에 대한 생각은 크게 감사하고 있습니다.
감사합니다!
해결법
-
==============================
1.당신은 당신의 응용 프로그램 코드에 대해 별도의 글로벌 연결 풀을 사용합니다. 초기화하여 redis.rb이 뭔가를 넣어 :
당신은 당신의 응용 프로그램 코드에 대해 별도의 글로벌 연결 풀을 사용합니다. 초기화하여 redis.rb이 뭔가를 넣어 :
require 'connection_pool' REDIS = ConnectionPool.new(size: 10) { Redis.new }
이제 응용 프로그램 코드의 어느 곳에서, 당신은이 작업을 수행 할 수 있습니다 :
REDIS.with do |conn| # some redis operations end
당신은 당신의 푸마 / sidekiq 근로자 사이에 공유에 대한 10 개의 연결을해야합니다. 이것은 당신이 올바르게 참고로, 단일 레디 스 연결을 통해 싸우는 모든 스레드가되지 않습니다, 이후 더 나은 성능으로 이어질 것입니다.
이 모든 것은 여기에 설명되어 있습니다 : https://github.com/mperham/sidekiq/wiki/Advanced-Options#connection-pooling
from https://stackoverflow.com/questions/28113940/what-is-the-best-way-to-use-redis-in-a-multi-threaded-rails-environment-puma by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 왜 레디 스 메모리 사용량은 감소하지 않을 때 키 델 절반 (0) | 2020.01.02 |
---|---|
[REDIS] 나는 레디 스 글로벌 TTL을 설정할 수 있습니까? (0) | 2020.01.02 |
[REDIS] 레디 스 : 소트 세트의 점수의 합 (0) | 2020.01.02 |
[REDIS] 레디 스는 구독을 공표 : IS 레디 스도 엄청난 스트레스를 받고 메시지를 전달하기 위해 보장? (0) | 2020.01.02 |
[REDIS] 레디 스 스캔 수 : 어떻게 패턴과 일치하는 모든 키를 반환 SCAN을 강제로? (0) | 2020.01.02 |