рдкрд░рд┐рдЪрдп
рдЪрд▓рд╛ memcache рд╕рд╛рд░рдЦреНрдпрд╛ рд╕рд╛рдзреНрдпрд╛ рдХреА/рд╡реНрд╣реЕрд▓реНрдпреВ рд╕реНрдЯреЛрдЕрд░рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ. рддреЗ рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗ рдЖрд╣реЗ: рдбреЗрдЯрд╛ рдореЗрдорд░реАрдордзреНрдпреЗ рд╣реЕрд╢рдореЕрдк рд╕реНрдЯреНрд░рдХреНрдЪрд░рдордзреНрдпреЗ рд╕рд╛рдард╡рд▓рд╛ рдЬрд╛рддреЛ. рддреЛ TCP рд╕реЙрдХреЗрдЯрджреНрд╡рд╛рд░реЗ рдЕреЕрдХреНрд╕реЗрд╕ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдкрд╛рдпрдердирдордзреНрдпреЗ, рд╣реЕрд╢рдореЕрдк рд╣рд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдбрд┐рдХреНрдЯ рдЖрд╣реЗ. рдЕреЕрдХреНрд╕реЗрд╕рд╕рд╛рдареА рдЖрдкрдг zeromq рд╡рд╛рдкрд░реВ.
рд╕рдорд╛рдпреЛрдЬрди
рд╣реЗ рдкреЕрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА debian/ubuntu рдлрдХреНрдд рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛
sudo apt-get install libzmq-dev
sudo pip install zmq
рдХреЛрдб
рдЪрд▓рд╛ рдЖрдкрд▓реНрдпрд╛рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рд╣реВрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░:
рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ zmq рд╕реЙрдХреЗрдЯрдЪрд╛ рдкреНрд░рдХрд╛рд░ REQ (REQuest, 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'
рд╡рд╛рдкрд░рд╛
рдХреЕрд╢реЗ = рд╕реБрдкрд░рдХреЕрдЪрд░()
рдХреЕрд╢реЗ.рд╕реЗрдЯ('рдХреА', 'рдореВрд▓реНрдп')
рдХреЕрд╢реЗ.рдЧреЗрдЯ('рдХреА')
рдЧреГрд╣рдкрд╛рда рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореНрд╣рдгреВрди, рд╡рд░реНрдЧрд╛рдЪрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдкрддреНрддрд╛/рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбреВрди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реБрдзрд╛рд░рд╛.
рдЖрддрд╛ рдЖрдкрдг рддреЗ рд╕реНрд╡рддрдГрдЪ рд▓рд┐рд╣реВ. рд╕рд░реНрд╡реНрд╣рд░.
рдпрд╛рд╡реЗрд│реА, рдЖрдореНрд╣реА REP(REPly, рдкреНрд░рддрд┐рд╕рд╛рдж) рд╕реЙрдХреЗрдЯ рд╡рд╛рдкрд░рддреЛтАФрдЖрдореНрд╣реА рд╡рд┐рдирдВрддреАрдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рддреЛ рдЖрдгрд┐ рдкреНрд░рддрд┐рд╕рд╛рдж рдкрд╛рдард╡рддреЛ. рдЖрдореНрд╣реА рд╡рд┐рдирдВрддреАрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЛ рдЖрдгрд┐ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА 'ok' рдХрд┐рдВрд╡рд╛ рд╡рд╛рдЪрдгреНрдпрд╛рд╕рд╛рдареА рдбреЗрдЯрд╛/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 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд╛рдкрд░реБрди рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ" рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рдиреЗ рд▓рд┐рд╣реВ рд╢рдХрддрд╛.
рд╕реНрддреНрд░реЛрдд: www.habr.com
