Predis: ์„œ๋ฒ„์—์„œ ์ค„์„ ์ฝ๋Š” ๋™์•ˆ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” blpop์ด ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2012๋…„ 05์›” 27์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: predis/predis

์•ˆ๋…•,

๋ ˆ๊ฑฐ์‹œ ๋ฒ„์ „์˜ Predis์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  Predis ์•ˆ์ • 7.2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ์ง€๋งŒ ๋œ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ ์ถ”์ ๊ณผ ์ถฉ๋Œํ•˜๋Š” blpop์— ๋ฃจํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

exception 'Predis\Network\ConnectionException' with message 'Error while reading line from the server' in /opt/proj/jeeran-ii/trunk/application/protected/extensions/redis/Predis/Network/ConnectionBase.php:159
Stack trace:
#0 /opt/proj/jeeran-ii/trunk/application/protected/extensions/redis/Predis/Network/StreamConnection.php(194): Predis\Network\ConnectionBase->onConnectionError('Error while rea...')
#1 /opt/proj/jeeran-ii/trunk/application/protected/extensions/redis/Predis/Network/ConnectionBase.php(142): Predis\Network\StreamConnection->read()
#2 /opt/proj/jeeran-ii/trunk/application/protected/extensions/redis/Predis/Network/ConnectionBase.php(134): Predis\Network\ConnectionBase->readResponse(Object(Predis\Commands\ListPopFirstBlocking))
#3 /opt/proj/jeeran-ii/trunk/application/protected/extensions/redis/Predis/Client.php(219): Predis\Network\ConnectionBase->executeCommand(Object(Predis\Commands\ListPopFirstBlocking))
#4 [internal function]: Predis\Client->__call('blpop', Array)

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Predis์— ์ž๋™ ์žฌ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :-) ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ๊ณ ์ •๋œ ๋ช‡ ์•ˆ ๋˜๋Š” ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜์ผ ๊ฒƒ์ด๋ฉฐ ์—ฌ์ „ํžˆ ๊ท€ํ•˜์˜ ์ œ์•ˆ์ด ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ํ–‰๋™์œผ๋กœ ํ•ดํ‚น๋œ ๊ตฌํ˜„์œผ๋กœ ์ด์–ด์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. . ๊ท€ํ•˜์™€ ๊ฐ™์€ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์€ ๊ตฌํ˜„ํ•˜๋Š” ์ตœ์ข… ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Predis๊ฐ€ ๊ทน๋„๋กœ ๋ชจ๋“ˆํ™”๋˜๋„๋ก ์„ค๊ณ„๋œ ๋ฐ”๋กœ ๊ทธ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ ํด๋ž˜์Šค Predis\Network\StreamConnection ๋ฅผ ํ™•์žฅํ•˜์—ฌ executeCommand() ๊ฐ€ try ... catch ๋ธ”๋ก ๋‚ด๋ถ€์— ์ƒ์œ„ ๋ฉ”์„œ๋“œ๋ฅผ ๋ž˜ํ•‘ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ์„ ๋•Œ์˜ ๋ช…๋ น์ž…๋‹ˆ๋‹ค. ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์™€ ๊ฐ™์ด ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š” ๋ช…๋ น์„ ๊ฒฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. README ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์—ฐ๊ฒฐ ํด๋ž˜์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธ์Šคํ„ด์Šค์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋„์›€์ด ๋ ๊นŒ์š”?

์ถ”์‹ : ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  #75, ๋ช‡ ๊ฐ€์ง€ ํŒ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐœ์ธ ์ด๋ฉ”์ผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  11 ๋Œ“๊ธ€

์ด๊ฒƒ์€ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„ ์— ๋”ฐ๋ผ Redis์™€ Predis๊ฐ€ ๋ชจ๋‘ ์žฅ๊ธฐ๊ฐ„ ์œ ํœด ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ํ‹ฐ์ผ“์— ๋Œ€ํ•ด ๋‹ค์‹œ ๋ณด๊ณ ํ•˜์„ธ์š”.

300์ดˆ ํ›„์— ์œ ํœด ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ซ์ง€ ์•Š๋„๋ก Redis๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ (redis.conf๋ฅผ ํŽธ์ง‘ํ•˜๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ ํ•ญ๋ชฉ์„ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ) predis\Client์˜ ์ƒ์„ฑ์ž์— ์ „๋‹ฌ๋œ ์„œ๋ฒ„ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐฐ์—ด/๋ฌธ์ž์—ด์— read_write_timeout => 0์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. .

๋‚˜๋Š” ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๋‚˜๋Š” redis๊ฐ€ ์œ ํœด ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ œ์ •์‹ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด์— ์ผ์ข…์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์œผ๋กœ
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋˜‘๋˜‘ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ฐจ๋‹จ ํ˜ธ์ถœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ํœด ์ƒํƒœ๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๊ธฐ์ ์œผ๋กœ ping์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋น„์Šทํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ง๋ฉดํ–ˆ์„ ๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
php-mysql์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

http://php.net/manual/en/function.mysql-ping.php

์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ Ping ํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ ์—ฐ๊ฒฐ

php-mysql์—์„œ ์ด์ „ mysql ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ํ•ด๋‹น ์—ฐ๊ฒฐ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜๊ฑฐ๋‚˜ ๋‹ซํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ping์„ ํ•˜๋ฉด ๋‹ค์‹œ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค

์—ฐ๊ฒฐ์ด ์žฌ์„ค์ •๋˜๊ฑฐ๋‚˜ ๋‹ซํž ๋•Œ Predis๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…
$_reconnecting=1์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด์ „ ์—ฐ๊ฒฐ์„ ๋Œ€์ฒดํ•˜๋Š” ์ƒˆ ์—ฐ๊ฒฐ์„ ๋งŒ๋“  ๋‹ค์Œ ping
๊ทธ๋Ÿฐ ๋‹ค์Œ blpop์œผ๋กœ ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

$_reconnecting===1 ๋™์•ˆ ์ด ๋ฌธ์ œ์— ๋‹ค์‹œ ์ง๋ฉดํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค Redis 2.6๋ถ€ํ„ฐ $ redis.conf ์˜ timeout ๊ตฌ์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 0 ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ์—ฌ์ „ํžˆ ์œ ํœด ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์„ค์ •์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ BLPOP redis.conf (์˜ˆ: BLPOP list 200 ), ๋”ฐ๋ผ์„œ ๋ชฉ๋ก์— ์š”์†Œ๊ฐ€ ํ‘ธ์‹œ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ 200์ดˆ ํ›„์— ๋ช…๋ น์ด NULL ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. BLPOP ๊ฐ€ ๋ฃจํ”„ ์•ˆ์— ์žˆ๊ณ  NULL ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ฆ‰์‹œ ๋ฃจํ”„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ชฉ๋ก์—์„œ ์œ ํšจํ•œ ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช…์‹œ์  ํ•‘ ๋ฐ ์ž๋™ ์žฌ์—ฐ๊ฒฐ์„ ๋ฌด์šฉ์ง€๋ฌผ๋กœ ๋งŒ๋“ค๊ณ  ๋’ค์—์„œ ์ผ์–ด๋‚˜๋Š” ๋งˆ์ˆ ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์„ ํ›จ์”ฌ ๋” ๋งŽ์ด ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ : Predis๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ณ  MULTI/EXEC, pubsub ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์ƒํƒœ์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์œผ๋กœ ์ด์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ ์žฌ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค Redis 2.6๋ถ€ํ„ฐ redis.conf์˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ตฌ์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 0์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” redis ์„œ๋ฒ„๊ฐ€ ์ตœ๋Œ€ ์ œํ•œ์— ๋„๋‹ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›ํžˆ ์‚ด์•„์žˆ๋Š” redis ์„œ๋ฒ„์— ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•ฉ๋‹ˆ๋‹ค(conf์— ์—†๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๋‹น ์ตœ๋Œ€ ์—ด๋ฆฐ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ปค๋„ ์ œํ•œ์— ์žˆ์„ ์ˆ˜ ์žˆ์Œ)

์—ฌ์ „ํžˆ ์œ ํœด ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์„ค์ •์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ redis.conf(์˜ˆ: BLPOP ๋ชฉ๋ก 200)์— ์ง€์ •๋œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ณด๋‹ค ์งง์€ ๋ชจ๋‹ˆํ„ฐ๋ง๋œ ํ‚ค์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ BLPOP์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ solr๋กœ ์ฆ๋ถ„ ์ธ๋ฑ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” redis์—์„œ ๋งˆ์ง€๋ง‰ ํฌ์ธํŠธ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ธ๋ฑ์‹ฑ์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์ƒˆ ํฌ์ธํŠธ๋ฅผ redis์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์‚ฌ์ด์˜ ์‹œ๊ฐ„์ด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— Predis๊ฐ€ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ : Predis๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ณ  MULTI/EXEC, pubsub ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์ƒํƒœ์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์œผ๋กœ ์ด์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ ์žฌ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ๋ฐฉ์‹์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. $_reconnecting=1 ํ”Œ๋ž˜๊ทธ๋กœ ์ธํ•ด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์ƒˆ ์—ฐ๊ฒฐ์ด ์œ ํšจํ•œ ํ•‘์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ƒˆ ์—ฐ๊ฒฐ์€ ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ๋ช…๋ น์ด ์˜๋„์ ์œผ๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋น„๋…ผ๋ฆฌ์ ์ด๋ผ๋ฉด ์ผ๋ถ€ ๋ช…๋ น์„ ์žฌ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ถ€ ๋ช…๋ น์„ ํ•ด์‹œ ๊ฐ€๋Šฅ ... ๋“ฑ์œผ๋กœ ํ‘œ์‹œํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

redis ์„œ๋ฒ„์—์„œ ์—ฐ๊ฒฐ์ด ๋Š๊ธธ๊นŒ๋ด ์ตœ๋Œ€ ์ œํ•œ์— ๋„๋‹ฌํ•˜์—ฌ ์ƒˆ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(conf์— ์—†๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๋‹น ์ตœ๋Œ€ ์—ด๋ฆฐ ์—ฐ๊ฒฐ์˜ ์ปค๋„ ์ œํ•œ์— ์žˆ์„ ์ˆ˜ ์žˆ์Œ).

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ž˜๋ชป๋œ ์ž‘์—…์ด๋‚˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ํ•œ ์˜์›ํžˆ ์‚ด ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜๋Š” pub/sub ๋˜๋Š” BRPOP/BLOP ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ์ž ์žฌ์ ์œผ๋กœ ๋งŽ์€ ์œ ํœด ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋งˆ์Šคํ„ฐ/์Šฌ๋ ˆ์ด๋ธŒ ๋ณต์ œ์— ์˜์กดํ•˜๊ณ  ๊ตฌ๋…์ž์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ solr๋กœ ์ฆ๋ถ„ ์ธ๋ฑ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” redis์—์„œ ๋งˆ์ง€๋ง‰ ํฌ์ธํŠธ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๋Š” ์ธ๋ฑ์‹ฑ์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์ƒˆ ํฌ์ธํŠธ๋ฅผ redis์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์‚ฌ์ด์˜ ์‹œ๊ฐ„์ด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— Predis๊ฐ€ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

$client->disconnect() ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๋Š” ์ธ๋ฑ์‹ฑ์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ $client->connect() ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” Predis๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น ์‹œ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•จ). ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ ํ›จ์”ฌ ๋” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์ด๋ฉฐ, ์‹ค์ œ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ Redis์— ๋„ˆ๋ฌด ๋งŽ์€ ์—ฐ๊ฒฐ์„ ์—ด์–ด๋‘๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‘๋ ค์›€๊ณผ๋„ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€ ๋ช…๋ น์ด ์˜๋„์ ์œผ๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋น„๋…ผ๋ฆฌ์ ์ด๋ผ๋ฉด ์ผ๋ถ€ ๋ช…๋ น์„ ์žฌ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ถ€ ๋ช…๋ น์„ ํ•ด์‹œ ๊ฐ€๋Šฅ ... ๋“ฑ์œผ๋กœ ํ‘œ์‹œํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ช…๋ น ํŒŒ์ดํ”„๋ผ์ด๋‹์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ MULTI / EXEC ์ปจํ…์ŠคํŠธ์—์„œ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋™์ž‘์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค(์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ์ „์ฒด ํŠธ๋žœ์žญ์…˜์ด ๋ถ„๋ช…ํžˆ ์„œ๋ฒ„์—์„œ ์‚ญ์ œ๋จ). ๋ฐ˜๋ฉด์— ๋ช…๋ น์„ ํ•ด์‹ฑํ•˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ/์ปจํ…์ŠคํŠธ/๊ธฐ๋ณธ ์—ฐ๊ฒฐ์˜ ์ƒํƒœ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ๋‚˜๋Š” ๋‹น์‹ ์—๊ฒŒ ๋น ๋ฅธ ์‘๋‹ต๊ณผ ๋ฌธ์ œ๋ฅผ ๋”ฐ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‘˜์งธ, multi/exec๊ฐ€ ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ช…๋ น์€ ์ •์ƒ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: get/set ๋˜๋Š” blpop).

์šฐ๋ฆฌ๋Š” Yii์˜ CRedisCache๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์—ฐ๊ฒฐ์„ ์บ์‹œํ•˜๋Š” getter๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ƒ์„ฑํ•˜๊ฒŒ ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

    public function getRedis()
    {
        if($this->_cache!==null)
            return $this->_cache;
        else{
            // to use the old single file approach comment out the next two lines and uncomment the 3rd
            require_once Yii::getPathOfAlias($this->predisPath).'/Autoloader.php';
            Predis\Autoloader::register();
            //require_once Yii::getPathOfAlias($this->predisPath).'.php'; // old single file approach,no autoloading
            Yii::log('Opening Redis connection',CLogger::LEVEL_TRACE);
            return $this->_cache=new Predis\Client($this->servers);
        }
    }

๋‹น์‹ ์€ ์ด๊ฒƒ์ด ๊ทธ๋“ค์˜ ๋ฌธ์ œ๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์—ฐ๊ฒฐ ํ•ด์ œ/์—ฐ๊ฒฐ/ํ•‘ ..etc๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ ๊ฒ€์ƒ‰ ํŒ€์˜ ๋ฌธ์ œ๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚˜๋Š” _๊ด€์‹ฌ ๋ถ„๋ฆฌ_์›์น™์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๊ฒ€์ƒ‰ ํŒ€์€ ๊ฒฐ์ฝ” ๊นŠ์ด ๋“ค์–ด๊ฐ€ redis ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด Predis๋ฅผ ๋ฐฉํƒ„์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™์•„์š”.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Predis์— ์ž๋™ ์žฌ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :-) ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ๊ณ ์ •๋œ ๋ช‡ ์•ˆ ๋˜๋Š” ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜์ผ ๊ฒƒ์ด๋ฉฐ ์—ฌ์ „ํžˆ ๊ท€ํ•˜์˜ ์ œ์•ˆ์ด ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ํ–‰๋™์œผ๋กœ ํ•ดํ‚น๋œ ๊ตฌํ˜„์œผ๋กœ ์ด์–ด์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. . ๊ท€ํ•˜์™€ ๊ฐ™์€ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์€ ๊ตฌํ˜„ํ•˜๋Š” ์ตœ์ข… ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Predis๊ฐ€ ๊ทน๋„๋กœ ๋ชจ๋“ˆํ™”๋˜๋„๋ก ์„ค๊ณ„๋œ ๋ฐ”๋กœ ๊ทธ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ ํด๋ž˜์Šค Predis\Network\StreamConnection ๋ฅผ ํ™•์žฅํ•˜์—ฌ executeCommand() ๊ฐ€ try ... catch ๋ธ”๋ก ๋‚ด๋ถ€์— ์ƒ์œ„ ๋ฉ”์„œ๋“œ๋ฅผ ๋ž˜ํ•‘ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ์„ ๋•Œ์˜ ๋ช…๋ น์ž…๋‹ˆ๋‹ค. ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์™€ ๊ฐ™์ด ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š” ๋ช…๋ น์„ ๊ฒฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. README ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์—ฐ๊ฒฐ ํด๋ž˜์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธ์Šคํ„ด์Šค์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋„์›€์ด ๋ ๊นŒ์š”?

์ถ”์‹ : ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  #75, ๋ช‡ ๊ฐ€์ง€ ํŒ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐœ์ธ ์ด๋ฉ”์ผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Predis์— ์ž๋™ ์žฌ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :-) ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ๊ณ ์ •๋œ ๋ช‡ ์•ˆ ๋˜๋Š” ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜์ผ ๊ฒƒ์ด๋ฉฐ ์—ฌ์ „ํžˆ ๊ท€ํ•˜์˜ ์ œ์•ˆ์ด ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ํ–‰๋™์œผ๋กœ ํ•ดํ‚น๋œ ๊ตฌํ˜„์œผ๋กœ ์ด์–ด์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. .

redis์˜ ์ž‘์„ฑ์ž๊ฐ€ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ๋™์˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://twitter.com/antirez/status/207117083790684161

์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์œ„ํ—˜์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์—ฐ๊ฒฐ์ด ๋ˆ„์ถœ๋˜๋Š” ๊ฒฝ์šฐ ์ˆ˜์ • ์‚ฌํ•ญ์€ IMHO ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

https://twitter.com/antirez/status/207122021665091584

์‚ฌ์šฉ์ž๋Š” ํ•ด๋‹น ๊ธฐ๋ณธ๊ฐ’์„ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 0์ด ์•„๋‹Œ ๊ธฐ๋ณธ๊ฐ’์€ ์žฌ์—ฐ๊ฒฐ ์‹œ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ 0 ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— php mysql ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ด์ „ ๊ฒฝํ—˜์— ๋Œ€ํ•œ ์šฐ๋ ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜›๋‚  ์˜›์ ์— mysql ์„œ๋ฒ„๋Š” ์›น ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜(์ตœ๋Œ€ ์‚ฌ์šฉ์ž ์—ฐ๊ฒฐ ์ดˆ๊ณผ)๋ฅผ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. php ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด์„œ php ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ๋ผ์ธ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์›น ์„œ๋ฒ„๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์—ฐ๊ฒฐ์ด ์—ด๋ ธ์ง€๋งŒ ์•„๋ฌด๋„ ์—ฐ๊ฒฐ์„ ์ œ๋Œ€๋กœ ๋‹ซ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

$n=null;
$c=foo_connect();
$n->do_something() ; // fatal error
foo_close($c);

๋ฌผ๋ก  OS๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์—ฐ๊ฒฐ์„ ๋‹ซ์ง€๋งŒ ๋งŽ์€ ๊ฒฝ์šฐ์— php๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ๋ฐ๋ชฌ์ž…๋‹ˆ๋‹ค(์˜ˆ: ๋ฏธ๋ฆฌ ํฌํฌ๋œ apache ํ”„๋กœ์„ธ์Šค, php fast cgi ๋ฐ๋ชฌ, php-fpm ๋ฐ๋ชฌ, ..etc) ) ์ฆ‰, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— OS๋Š” ํ•ด๋‹น ์—ฐ๊ฒฐ์„ ๋‹ซ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์Šคํฌ๋ฆฝํŠธ๋งŒ ์ข…๋ฃŒ๋จ).

Salvatore Sanfilippo(redis์˜ ์ €์ž)์— ๋”ฐ๋ฅด๋ฉด
https://twitter.com/antirez/status/207123059700801537
https://twitter.com/antirez/status/207123035243814912

๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.
PHP ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ Predis๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ PHP ์†Œ์ผ“์ด ์žˆ์Šต๋‹ˆ๋‹ค. redis ์—ฐ๊ฒฐ์€ ์˜์›ํžˆ ์ข€๋น„/์Šคํ†จ์ด ๋˜๊ฑฐ๋‚˜ OS๊ฐ€ ์ •๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค

์ด ๋‘ ๊ฐ€์ง€ ์œ ํ˜• ์ค‘ Predis๋Š” ์–ด๋–ค ์œ ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋‚˜ 0 ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— php mysql ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ด์ „ ๊ฒฝํ—˜์— ๋Œ€ํ•œ ์šฐ๋ ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

mysql_pconnect() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MySQL์— ๋Œ€ํ•œ ์˜๊ตฌ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•  ๋•Œ php.ini์˜ $ mysql.max_persistent php.ini ๊ฐ€ ์ •์ƒ์ ์ธ ๊ฐ’(MySQL์— ๋Œ€ํ•ด ์„ค์ •๋œ ๊ฐ’๋ณด๋‹ค ๋‚ฎ์Œ)์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋น„์˜๊ตฌ์  MySQL ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด mysql_close() ์— ๋Œ€ํ•œ ๋ช…์‹œ์  ํ˜ธ์ถœ ์€ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ๋๋‚  ๋•Œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•ด์ œ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธ€์Ž„, mysql ๋ชจ๋“ˆ์ด๋‚˜ PHP ์ž์ฒด์˜ ์ผ๋ถ€ ๋ฒ„๊ทธ๋ฅผ ์ œ์™ธํ•˜๊ณ ).

์ฆ‰, Predis๋Š” persistent=1 ๊ฐ€ ์—ฐ๊ฒฐ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ง€์ •๋œ ๊ฒฝ์šฐ ์˜๊ตฌ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„์˜๊ตฌ ์—ฐ๊ฒฐ์€ ๋‹ค๋ฅธ ๋น„์˜๊ตฌ ๋ฆฌ์†Œ์Šค์™€ ๋™์ผํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ๋‹ซํžˆ์ง€๋งŒ(์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ํ•ด์ œ๋จ) ์—ฐ๊ฒฐ ํด๋ž˜์Šค์˜ __destruct() ๋ฉ”์„œ๋“œ๋Š” ์–ด์จŒ๋“  ๊ธฐ๋ณธ ์†Œ์ผ“ ์ŠคํŠธ๋ฆผ์„ ๊ฐ•์ œ๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์—ฐ๊ฒฐ ๊ฐœ์ฒด๊ฐ€ ๋” ์ด์ƒ ํ™œ์„ฑ ์ฐธ์กฐ๊ฐ€ ์—†๋Š” ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฏ€๋กœ ์—ฐ๊ฒฐ ๊ฐœ์ฒด๊ฐ€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๋  ๋•Œ ์†Œ์ผ“์ด ๋‹ซํž™๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊นŠ์€ ํ›„์† ์กฐ์น˜๋ฅผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

php.ini๋ฅผ ์กฐ์ •ํ•˜์—ฌ mysql ์˜ค๋ฅ˜์— ๋Œ€ํ•ด์„œ๋„ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

http://dev.mysql.com/doc/refman/5.0/en/blocked-host.html

Host 'host_name' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰