Utangulizi
Hebu tuangalie mfano wa uhifadhi rahisi wa ufunguo/thamani, kama vile memcache. Imeundwa kwa urahisi - data imehifadhiwa kwenye kumbukumbu, katika muundo wa hashmap. Zinapatikana kupitia tundu la tcp. Katika Python, hashmap ni amri ya kawaida. Kwa ufikiaji tutatumia zeromq.
marekebisho
Ili kusakinisha kifurushi hiki kwenye debian/ubuntu, ingiza tu kwenye koni
sudo apt-get install libzmq-dev
sudo pip install zmq
Kanuni
Wacha tuandike darasa la kufanya kazi na seva yetu:
Aina ya soketi ya zmq inayotumika ni REQ(REQuest, request), tunatuma ombi na kusubiri jibu.
Ili kuhifadhi na kusambaza aina yoyote ya data kwenye mtandao, tunatumia moduli ya kawaida ya kachumbari. "Itifaki" ya kazi ni nakala ya maadili matatu: (amri, ufunguo, data)
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'
Matumizi ya
kache = SuperCacher ()
cache.set('ufunguo', 'thamani')
cache.get('ufunguo')
Kama kazi ya nyumbani, boresha utekelezaji kwa kuongeza uwezo wa kubainisha anwani/mlango unapounda mfano wa darasa.
Sasa hebu tuandike seva yenyewe.
Wakati huu tundu REP(REPly, response) inatumika - tunasubiri ombi, kutuma jibu. Tunachanganua ombi na kujibu ama kwa 'sawa' katika kesi ya kuandika, au kwa data / Hakuna katika kesi ya kusoma.
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()
Ili kujaribu kila kitu pamoja, tunaanza seva na amri
python daemon.py
Kwenye kichupo kinachofuata, uzindua python katika hali ya maingiliano.
>>> from lib import SuperCacher
>>> cache=SuperCacher()
>>> cache.set('key', 'value')
True
>>> cache.get('key')
'value'
Ah muujiza, inafanya kazi! Sasa unaweza kuandika katika wasifu wako kwa usalama "maendeleo ya hifadhi ya thamani-msingi kwa kutumia itifaki ya zmq"
Chanzo: mapenzi.com