Node-redis: ν˜ΈμŠ€νŠΈμ™€ ν¬νŠΈκ°€ μ—†λŠ” options 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ redis ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2019λ…„ 03μ›” 16일  Β·  18μ½”λ©˜νŠΈ  Β·  좜처: NodeRedis/node-redis

이 μ½”λ“œλŠ” μ‹€ν–‰ 쀑인 둜컬 μ„œλ²„κ°€ 없어도 였λ₯˜ 없이 μ‹€ν–‰λ©λ‹ˆλ‹€. μ˜¬λ°”λ₯Έ ν–‰λ™μž…λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ λ²„κ·Έμž…λ‹ˆκΉŒ?

const redis = require('redis')
const redisClient = redis.createClient({ retry_strategy: () => 1000 })
  • 버전 : 2.8.
  • ν”Œλž«νΌ : Node.js 10.15.3 Mac OS X Mojave, Node.js 11 μ•ŒνŒŒμΈ, Node.js 10.15.3 μ•ŒνŒŒμΈ
  • μ„€λͺ… : ν˜ΈμŠ€νŠΈμ™€ ν¬νŠΈκ°€ μ—†λŠ” options 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ redis ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
Evaluating

λͺ¨λ“  18 λŒ“κΈ€

@mikhailsidorov - κΈ°λ³Έ μ˜΅μ…˜μ΄ 각각 'localhost' 및 6379 μ΄λ―€λ‘œ λ§žμŠ΅λ‹ˆλ‹€.

μ•„, ν•˜μ§€λ§Œ μ‹€ν–‰ 쀑인 둜컬 Redis μ„œλ²„κ°€ μ—†λ‹€λŠ” λ§μ”€μ΄μ‹ κ°€μš”? ν•˜ν•˜ν•˜
이제 그것은 μ—„μ²­λ‚˜κ²Œ 이상할 κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” 당신이 μ—¬μ „νžˆ Redis μΈμŠ€ν„΄μŠ€λ₯Ό μ‹€ν–‰ν•˜κ³  μžˆλ‹€λŠ” 것을 보μž₯ν•©λ‹ˆλ‹€... λ‹Ήμ‹ μ˜ λ¦¬λˆ…μŠ€ λͺ…령쀄 μ½˜μ†”λ‘œ μ΄λ™ν•˜μ‹­μ‹œμ˜€.

μ‹€ν–‰ 쀑인 λͺ¨λ“  Redis μΈμŠ€ν„΄μŠ€ 보기
ps -aux | grep redis-server

λͺ¨λ“  Redis μΈμŠ€ν„΄μŠ€ μ’…λ£Œ
killall redis-server

티켓을 λ‹«μœΌμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” redis없이 dockerμ—μ„œ μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€.

RedisλŠ” μ–΄λ”˜κ°€μ—μ„œ μ‹€ν–‰ 쀑이어야 ν•˜λ©° λ‚΄ ν™˜κ²½μ—μ„œ μ‹œλ„ν•˜κ³  /etc/init.d/redis-server stop . μ²˜μŒμ—λŠ” 당신이 μ–ΈκΈ‰ ν•œλŒ€λ‘œ μ •ν™•ν•˜κ²Œ μˆ˜ν–‰λ˜μ–΄ λ‹Ήν™©ν–ˆμŠ΅λ‹ˆλ‹€! 그런 λ‹€μŒ ps -aux | grep redis-server λ₯Ό μ‹€ν–‰ν–ˆλŠ”λ° λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 7개의 Redis μΈμŠ€ν„΄μŠ€κ°€ μ‹€ν–‰λ˜κ³  μžˆλ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. lol. λͺ¨λ‘ μ’…λ£Œν•œ ν›„ λ…Έλ“œ redisλŠ” μ˜ˆμƒλŒ€λ‘œ μ¦‰μ‹œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

@mikhailsidorov - κΈ°λ³Έ μ˜΅μ…˜μ΄ 각각 'localhost' 및 6379 μ΄λ―€λ‘œ λ§žμŠ΅λ‹ˆλ‹€.

μ•„, ν•˜μ§€λ§Œ μ‹€ν–‰ 쀑인 둜컬 Redis μ„œλ²„κ°€ μ—†λ‹€λŠ” λ§μ”€μ΄μ‹ κ°€μš”? ν•˜ν•˜ν•˜
이제 그것은 μ—„μ²­λ‚˜κ²Œ 이상할 κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” 당신이 μ—¬μ „νžˆ Redis μΈμŠ€ν„΄μŠ€λ₯Ό μ‹€ν–‰ν•˜κ³  μžˆλ‹€λŠ” 것을 보μž₯ν•©λ‹ˆλ‹€... λ‹Ήμ‹ μ˜ λ¦¬λˆ…μŠ€ λͺ…령쀄 μ½˜μ†”λ‘œ μ΄λ™ν•˜μ‹­μ‹œμ˜€.

μ‹€ν–‰ 쀑인 λͺ¨λ“  Redis μΈμŠ€ν„΄μŠ€ 보기
ps -aux | grep redis-server

λͺ¨λ“  Redis μΈμŠ€ν„΄μŠ€ μ’…λ£Œ
killall redis-server

티켓을 λ‹«μœΌμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ‚΄ 컴퓨터와 도컀 μ»¨ν…Œμ΄λ„ˆμ— redis-server ν”„λ‘œμ„ΈμŠ€κ°€ μ—†μŠ΅λ‹ˆλ‹€. λ˜ν•œ 6379 포트λ₯Ό μˆ˜μ‹ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μ—†μŠ΅λ‹ˆλ‹€( netstat -an | grep 6379 λŠ” 아무 것도 λ°˜ν™˜ν•˜μ§€ μ•ŠμŒ).

RedisλŠ” μ–΄λ”˜κ°€μ—μ„œ μ‹€ν–‰ 쀑이어야 ν•˜λ©° λ‚΄ ν™˜κ²½μ—μ„œ μ‹œλ„ν•˜κ³  /etc/init.d/redis-server stop . μ²˜μŒμ—λŠ” 당신이 μ–ΈκΈ‰ ν•œλŒ€λ‘œ μ •ν™•ν•˜κ²Œ μˆ˜ν–‰λ˜μ–΄ λ‹Ήν™©ν–ˆμŠ΅λ‹ˆλ‹€! 그런 λ‹€μŒ ps -aux | grep redis-server λ₯Ό μ‹€ν–‰ν–ˆλŠ”λ° λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 7개의 Redis μΈμŠ€ν„΄μŠ€κ°€ μ‹€ν–‰λ˜κ³  μžˆλ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. lol. λͺ¨λ‘ μ’…λ£Œν•œ ν›„ λ…Έλ“œ redisλŠ” μ˜ˆμƒλŒ€λ‘œ μ¦‰μ‹œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

redis-server μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€λ₯Ό 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

문제λ₯Ό μž¬ν˜„ν•˜κΈ° μœ„ν•œ 예제λ₯Ό μ€€λΉ„ν–ˆμŠ΅λ‹ˆλ‹€. https://github.com/mikhailsidorov/redis-issue 리포지토리λ₯Ό
이 μ½”λ“œλŠ” 였λ₯˜ 없이 μ‹€ν–‰λ˜λ©° ν…ŒμŠ€νŠΈλœ μ‹œμŠ€ν…œκ³Ό 도컀 μ»¨ν…Œμ΄λ„ˆμ—μ„œ redis-server ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

ν˜Ήμ‹œ redis-mock λ˜λŠ” 이와 μœ μ‚¬ν•œ 것을 μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? (μ˜μ‹¬, κ·Έλƒ₯ 확인...)
https://github.com/faeldt/redis-mock

λ‹€μŒμ€ Redisλ₯Ό 끄고 λ‚΄ 앱을 μ‹€ν–‰ν•  λ•Œ λ°›λŠ” 였λ₯˜μž…λ‹ˆλ‹€...(이것은 μ œκ³΅ν•œ 도컀 앱이 μ•„λ‹™λ‹ˆλ‹€.) 도컀λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 아직 도컀λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€. μ‹œκ°„μ„ λ§žμΆ°μ•Ό ν•©λ‹ˆλ‹€. 쑰금 μžˆλ‹€κ°€ 해봐야지....

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

ν˜Ήμ‹œ redis-mock λ˜λŠ” 이와 μœ μ‚¬ν•œ 것을 μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? (μ˜μ‹¬, κ·Έλƒ₯ 확인...)
https://github.com/faeldt/redis-mock

λ‹€μŒμ€ Redisλ₯Ό 끄고 λ‚΄ 앱을 μ‹€ν–‰ν•  λ•Œ λ°›λŠ” 였λ₯˜μž…λ‹ˆλ‹€...(이것은 μ œκ³΅ν•œ 도컀 앱이 μ•„λ‹™λ‹ˆλ‹€.) 도컀λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 아직 도컀λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€. μ‹œκ°„μ„ λ§žμΆ°μ•Ό ν•©λ‹ˆλ‹€. 쑰금 μžˆλ‹€κ°€ 해봐야지....

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

μ•„λ‹ˆμš”, redis-mock을 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ˜΅μ…˜ 없이 const redisClient = redis.createClient() λ₯Ό μ‹€ν–‰ν•˜λ©΄ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€λ§Œ { retry_strategy: () => 1000 } μ „λ‹¬ν•˜λ©΄ 이 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

였 μ’‹μ•„, μš°λ¦¬κ°€ μ§€κΈˆ 같은 νŽ˜μ΄μ§€μ— μžˆλ‹€κ³  μƒκ°ν•˜μ‹­μ‹œμ˜€ ...

예, node_redis μž¬μ‹œλ„ μ—°κ²°/μž¬μ—°κ²° μ½”λ“œκ°€ ν˜„μž¬ μ™„μ „νžˆ μ€‘λ‹¨λœ 것 κ°™μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 문제λ₯Ό μ–ΈκΈ‰ν•˜λŠ” λ§Žμ€ 곡개 티켓이 μžˆμŠ΅λ‹ˆλ‹€. 였늘 λ°€ λ‹€λ₯Έ nodeJS λͺ¨λ“ˆμ— λŒ€ν•œ PR μš”μ²­μ„ μ œμΆœν–ˆμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ³  κ°€λŠ₯ν•œ 경우 μœ νš¨ν•œ PR을 μ œμΆœν•˜λ €κ³  ν•©λ‹ˆλ‹€.

였 μ’‹μ•„, μš°λ¦¬κ°€ μ§€κΈˆ 같은 νŽ˜μ΄μ§€μ— μžˆλ‹€κ³  μƒκ°ν•˜μ‹­μ‹œμ˜€ ...

예, node_redis μž¬μ‹œλ„ μ—°κ²°/μž¬μ—°κ²° μ½”λ“œκ°€ ν˜„μž¬ μ™„μ „νžˆ μ€‘λ‹¨λœ 것 κ°™μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 문제λ₯Ό μ–ΈκΈ‰ν•˜λŠ” λ§Žμ€ 곡개 티켓이 μžˆμŠ΅λ‹ˆλ‹€. 였늘 λ°€ λ‹€λ₯Έ nodeJS λͺ¨λ“ˆμ— λŒ€ν•œ PR μš”μ²­μ„ μ œμΆœν–ˆμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ³  κ°€λŠ₯ν•œ 경우 μœ νš¨ν•œ PR을 μ œμΆœν•˜λ €κ³  ν•©λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€

이것은 λ‹€μ†Œ μ˜λ„μ μž…λ‹ˆλ‹€. connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

μ˜λ„λŠ” λͺ¨λ“  μž¬μ—°κ²° 논리가 μ‚¬μš©μžμ˜ 손에 μžˆλŠ” 맀우 κ°•λ ₯ν•œ κΈ°λŠ₯을 κ°–λŠ” κ²ƒμž…λ‹ˆλ‹€. 항상 μ΄μƒμ μ΄μ§€λŠ” μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이것은 λ‹€μ†Œ μ˜λ„μ μž…λ‹ˆλ‹€. connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

μ˜λ„λŠ” λͺ¨λ“  μž¬μ—°κ²° 논리가 μ‚¬μš©μžμ˜ 손에 μžˆλŠ” 맀우 κ°•λ ₯ν•œ κΈ°λŠ₯을 κ°–λŠ” κ²ƒμž…λ‹ˆλ‹€. 항상 μ΄μƒμ μ΄μ§€λŠ” μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λͺ…ν™•ν•˜κ²Œ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

@mikhailsidorov - 문제λ₯Ό μ’…λ£Œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

@knoxcard μ‹œκ°„μ΄ λ‚  λ•Œ 이 뢀뢄을 λ‹€μ‹œ μ‚΄νŽ΄λ³Ό 수 μžˆλ„λ‘ 열어두고 μ‹ΆμŠ΅λ‹ˆλ‹€.

@knoxcard 그런데 μ—¬κΈ°μ„œ λͺ‡ 가지 문제λ₯Ό

@BridgeAR - μ ˆλŒ€μ μœΌλ‘œ! μ–΄λ–»κ²Œ 더 도와야 ν•˜λ‚˜μš”?

@mikhailsidorov - 문제λ₯Ό μ’…λ£Œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ¬Όλ‘ , ν•„μš”ν•œ κ²½μš°μž…λ‹ˆλ‹€. 감사 ν•΄μš”

@mikhailsidorov - 문제λ₯Ό μ’…λ£Œν•˜λŠ” 것은 신경쓰지 λ§ˆμ„Έμš”. BridgeAr은 이 문제λ₯Ό 계속 열어두고 μ‹Άμ–΄ν•©λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰