์๊ฐ
Memcache์ ๊ฐ์ ๊ฐ๋จํ ํค/๊ฐ ์ ์ฅ์์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ๊ฐ๋จํ๊ฒ ์ค๊ณ๋์์ต๋๋ค. ๋ฐ์ดํฐ๋ ํด์๋งต ๊ตฌ์กฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. TCP ์์ผ์ ํตํด ์ก์ธ์ค๋ฉ๋๋ค. Python์์ hashmap์ ์ผ๋ฐ ์ฌ์ ์
๋๋ค. ์ก์ธ์ค๋ฅผ ์ํด zeromq๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์กฐ์
์ด ํจํค์ง๋ฅผ debian/ubuntu์ ์ค์นํ๋ ค๋ฉด ์ฝ์์ ๋ค์์ ์
๋ ฅํ์ธ์.
sudo apt-get install libzmq-dev
sudo pip install zmq
์ํธ
์๋ฒ์์ ์๋ํ๋ ํด๋์ค๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
์ฌ์ฉ๋๋ zmq ์์ผ ์ ํ์ REQ(REQuest, ์์ฒญ)์ด๋ฉฐ, ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
๋คํธ์ํฌ๋ฅผ ํตํด ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ์กํ๊ธฐ ์ํด ํ์ค ํผํด ๋ชจ๋์ ์ฌ์ฉํฉ๋๋ค. ์์
"ํ๋กํ ์ฝ"์ ์ธ ๊ฐ์ง ๊ฐ(๋ช
๋ น, ํค, ๋ฐ์ดํฐ)์ผ๋ก ๊ตฌ์ฑ๋ ํํ์
๋๋ค.
import zmq
import pickle
class SuperCacher:
def __init__(self):
context = zmq.Context()
self.socket = context.socket(zmq.REQ)
self.socket.connect('tcp://127.0.0.1:43000')
def get(self, key):
self.socket.send(pickle.dumps(('get', key, None)))
return pickle.loads(self.socket.recv())
def set(self, key, data):
self.socket.send(pickle.dumps(('set', key, data)))
return self.socket.recv() == b'ok'
์ฌ์ฉ
์บ์ = SuperCacher()
์บ์.์ธํธ('ํค', '๊ฐ')
์บ์.get('ํค')
์์ ๋ก ํด๋์ค ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์ฃผ์/ํฌํธ๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ๊ตฌํ์ ๊ฐ์ ํ์ธ์.
์ด์ ์๋ฒ ์์ฒด๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
์ด๋ฒ์๋ ์์ผ REP(REPly, response)๊ฐ ์ฌ์ฉ๋ฉ๋๋ค - ์ฐ๋ฆฌ๋ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ต์ ๋ณด๋
๋๋ค. ์ฐ๋ฆฌ๋ ์์ฒญ์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ์ฐ๋ ๊ฒฝ์ฐ 'ok'๋ก ์๋ตํ๊ฑฐ๋ ์ฝ๋ ๊ฒฝ์ฐ data / None์ผ๋ก ์๋ตํฉ๋๋ค.
import pickle
import json
import zmq
def run_daemon():
memory = {}
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind('tcp://127.0.0.1:43000')
while True:
try:
command, key, data = pickle.loads(socket.recv())
if command == 'set':
memory[key] = data
socket.send(b'ok')
elif command == 'get':
result = memory.get(key, None)
socket.send(pickle.dumps(result))
except Exception as e:
print(e)
if __name__ == '__main__':
run_daemon()
๋ชจ๋ ๊ฒ์ ํจ๊ป ํ
์คํธํ๊ธฐ ์ํด ๋ค์ ๋ช
๋ น์ผ๋ก ์๋ฒ๋ฅผ ์์ํฉ๋๋ค.
python daemon.py
๋ค์ ํญ์์ Python์ ๋ํํ ๋ชจ๋๋ก ์คํํฉ๋๋ค.
>>> from lib import SuperCacher
>>> cache=SuperCacher()
>>> cache.set('key', 'value')
True
>>> cache.get('key')
'value'
์ค, ๊ธฐ์ ์ด๊ตฐ์, ์๋ํ๋ค์! ์ด์ ์ด๋ ฅ์์ "zmq ํ๋กํ ์ฝ์ ์ฌ์ฉํ ํค-๊ฐ ์ ์ฅ์ ๊ฐ๋ฐ"์ ์์ ํ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com