Una dintre modalitățile de a calma tulpina pe un server este prin cache-ul datelor. Aceasta se face prin cache-ul datelor după ce a fost procesat și apoi servind-l din cache la următoarea solicitare. Acest tutorial va oferi o discuție detaliată despre Redis, explicând modul de instalare a datelor Redis și cache în aplicațiile Python.
Caching-ul se referă la stocarea răspunsului serverului în client însuși, astfel încât un client nu trebuie să facă o solicitare de server pentru aceeași resursă din nou și din nou. Un răspuns de la server trebuie să aibă informații despre modul în care trebuie să se facă cache-ul, astfel încât un client să cacheze răspunsul pentru o perioadă de timp sau să nu cacheze răspunsul serverului.
Un cache, pe de altă parte, este o componentă hardware sau software utilizată pentru stocarea datelor, astfel încât cererile viitoare pentru aceleași date pot fi difuzate mai repede.
În această vârstă, în care utilizatorii se așteaptă la rezultate într-o secundă, este bine să se servească cererile prin citirea datelor din memoria cache, ceea ce este în cele din urmă mai rapid decât citirea dintr-un magazin de date mai lent; astfel, performanța sistemului depinde de câte cereri pot fi trimise din memoria cache.
Redis este un open-source, stocat în memorie structura de date, folosit ca bază de date, cache și broker de mesaje. Funcționează prin stocarea datelor într-o memorie cache și furnizarea acesteia la următoarea solicitare, în loc să interogheze baza de date de fiecare dată.
Primul pas este să-l puneți pe Redis în funcțiune pe mașina dvs. Cea mai simplă modalitate de a instala Redis este prin intermediul managerului de pachete al sistemului de operare, astfel:
sudo apt-get instalați redis-server
De asemenea, puteți urma instrucțiunile de pe site-ul oficial Redis.
Descărcați și extrageți Redis 4.0.6 gudron după cum urmează:
$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz $ tar xzf redis-4.0.6.tar.gz $ cd redis-4.0.6 $ make
Binarele care sunt acum compilate sunt disponibile în directorul src. Rulați Redis cu:
$ src / redis-server
Puteți interacționa cu Redis utilizând clientul încorporat:
$ src / redis-cli redis set foo bar OK redisare pentru foo "bar"
Pentru a verifica dacă serverul Redis rulează, lansați următoarea comandă pe terminal:
$ sudo redis-server * Gata să accepte conexiuni
Să creăm proiectul nostru Django. Proiectul nostru va putea să cacheze toate produsele dintr-un magazin, făcând-o ușor și rapidă pentru a prelua datele în interogările ulterioare.
Pentru a utiliza Redis în aplicația noastră, trebuie să facem următoarele:
Înainte de a începe, creați un director și instalați un mediu virtual. Un mediu virtual vă va permite să instalați versiuni de bibliotecă solicitate de aplicația dvs..
mkdir myprojects cd myprojects
Apoi, activați mediul virtual și instalați cerințele proiectului.
sursă venv / bin / activa pip instalare django == 1.9 pip instalare django-redis pip instalare djangorestframework
django-admin startproject django_cache
Creați o nouă aplicație denumită magazin, care se va ocupa de gestionarea produselor din magazinul nostru.
cd django_cache magazinul python manage.py startapp
Adăugați aplicația de magazin și rest_framework la lista de aplicații instalate din settings.py
fişier.
# settings.py INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django. contrib.staticfiles ',' store ', # adauga aici' rest_framework ', # adauga aici si aici]
În magazin / models.py
, începem prin crearea modelului de produs pentru stocarea detaliilor produsului după cum urmează:
de la __future__ import unicode_literals de la modelele de import django.db importtime datetime # Creați-vă modelele aici. Clasa Produs (modele.Model): nume = modele.CharField (max_length = 255) description = models.TextField (null = True, blank = True) pret = models.IntegerField (null = True = blank) date_created = DateTimeField (auto_now_add = True, blank = adevărat) date_modified = models.DateTimeField (auto_now = True, blank = True) def __unicode __ (self) 'nume': auto.name, 'desc': auto.description, 'price': self.price, 'date_created': self.date_created, 'date_modified': self.date_modified
Creați o migrare inițială pentru modelul de produse și sincronizați baza de date pentru prima dată.
administrarea python manage.py makemigration migrație python manage.py
Creați un superuser, conectați-vă la panoul de administrare și completați baza de date cu unele date de probă pe care le vom folosi pentru a face testele noastre.
python manage.py createsuperuser
Pentru a folosi Redis cu o aplicație Django, trebuie să configuram Redis pentru a stoca datele cache-ului aplicației. Și următoarele pentru dvs. settings.py
fişier:
CACHES = 'default': 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis: //127.0.0.1: 6379 /', 'OPTIONS': 'CLIENT_CLASS': 'django_redis.client .DefaultClient ',
Apoi, vom crea un punct final care va prelua toate produsele din baza noastră de date. Vom încerca mai întâi performanța aplicației în ceea ce privește durata de preluare a datelor din baza de date fără a fi cacheată. Apoi vom implementa un alt parametru care va prelua datele din memoria cache și va compara performanța.
În magazin / views.py
, adăugați următorul cod care preia toate produsele prezente în baza de date.
de la django.shortcuts importați render de la rest_framework.decorators importați api_view din rest_framework.response importați Răspunsul de la starea de import a rest_framework # Creați-vă vizualizările aici. @api_view (['GET ']) def view_books (request): products = Product.objects.all () results = [product.to_json () pentru produs în produse] return Response (results, status = status.HTTP_201_CREATED)
Creați un fișier magazin / urls.py
și adăugați următorul cod.
# store / urls.py de la django.conf.urls import url de la .views import view_books urlpatterns = [url (r '^ $', view_books),]
De asemenea, trebuie să importem adrese URL din aplicația utilizatorilor în principal django_cache / urls.py
fişier.
# django_cache / urls.py de la adresa de import django.conf.urls, includeți de la django.contrib importul admin urlpatterns = [url (r '^ admin /', admin.site.urls), url (r '^ store / include ('store.urls'))]
Să facem un test și să vedem dacă suntem pe drumul cel bun. Vom folosi testul de încărcare. Dacă nu sunteți familiarizat cu testul de încărcare, este un instrument pentru testarea performanței.
Instalarea testului de încărcare ca root este simplă:
sudo npm instalați -g loadtest
$ loadtest -n 100 -k http: // localhost: 8000 / store / # rezultat INFO Cereri pe secundă: 55
După cum reiese din cele de mai sus, 55 de cereri sunt procesate pe secundă.
Să creați un alt punct final pentru preluarea datelor după cache-ul cu Redis. Editați | × utilizatorii / views.py
pentru a se potrivi cu următoarele:
de la rest_framework.decorators importa api_view din rest_framework starea importului din importul rest_framework.response Răspunsul din cache-ul de import django.core.cache din setările de import django.conf de la importul django.core.cache.backends.base DEFAULT_TIMEOUT CACHE_TTL = getattr (setările "CACHE_TTL ', DEFAULT_TIMEOUT) din .models import Product # Creați vizualizările dvs. aici. @api_view (['GET']) def view_books (request): # restul codului @api_view (['GET']) def view_cached_books (cerere): if 'product' in cache: .get ('product') return Response (produse, status = status.HTTP_201_CREATED) else: products = Product.objects.all () results = [product.to_json () (produs, rezultate, timeout = CACHE_TTL) return Response (rezultate, status = status.HTTP_201_CREATED)
Codul de mai sus va verifica dacă produsul cheie este prezent în memoria cache și dacă este găsit, datele reprezentate vor fi returnate browserului. În cazul în care nu există date în cache, vom prelua mai întâi datele din baza de date, vom stoca în memoria cache și apoi vom returna datele solicitate în browser.
Actualizați magazin / urls.py
după cum urmează.
de la django.conf.urls import url de la .views import view_books, view_cached_books urlpatterns = [url (r '^ $', view_books), url (r '^ cache /', view_cached_books)
Să facem testele.
$ loadtest -n 100 -k http: // localhost: 8000 / store / cache / # results INFO Cererile pe secundă: 233
Prima dată când ați atins punctul final localhost: 8000 / store / cache, aplicația va interoga din baza de date și va returna datele, dar apelurile ulterioare la adresa URL vor ocoli baza de date și interogarea din memoria cache, deoarece datele sunt deja disponibile în memoria cache.
În acest tutorial, am folosit Redis pentru a da o aplicație iluzia vitezei. Folosim RAM-ul în Redis pentru a stoca rezultatele interogărilor și apoi pentru a returna aceste rezultate din memoria cache în interogările ulterioare, în loc să faceți călătoria înapoi în baza de date.
Există și alte instrumente de caching disponibile, cum ar fi Memcached, care este similar cu Redis. Cu toate acestea, Redis este mult mai popular decât Memcached, deoarece durează doar câteva minute pentru a configura și de a lucra în aplicații. Redis are mecanisme mai sofisticate, așa cum a fost descris ca un "magazin de structuri de date", făcându-l mai puternic și mai flexibil. Redis are, de asemenea, un avantaj mai mare, deoarece puteți stoca date sub orice formă.
Sperăm că acest tutorial vă arată cât de ușor este să adăugați un strat de cache aplicației dvs., îmbunătățind astfel performanța. Caching-ul trebuie să fie ceva de luat în considerare când trebuie să reduceți timpul de încărcare și costurile serverului.