2017-07-17 11 views
0

Ich muss Daten aus Memcached abrufen. Aber mein Code holt es von der Datenbank ab.Abrufen von Daten aus Memcached

Der Pseudocode ist wie folgt:

given a URL, try finding that page in the cache 

if the page is in the cache: 
    return the cached page 
else: 
    generate the page 
    save the generated page in the cache (for next time) 
    return the generated page 

Mein Python-Code ist wie folgt:

class CachedAPIView(APIView): 
    def get_queryset(self,request): 
     return function(self,request.data) 

    def get_object(self,queryset=None): 
     obj = cache.get('%s-%s'%(self.modelName.lower(),self.kwargs['pk']),None) 
     if not obj: 
      obj=super(CachedAPIView,self).get_object(queryset) 
      cache.set('%s-%s'%(self.modelName.lower(),self.kwargs['pk']),obj) 

class ABC(CachedAPIView): 
    def fun(self,request,format=None): 
     request.data['PubIp']=getUserIP(request) 
     returnData=CachedAPIView.get_queryset(self,request) 
     if returnData == "TOKEN_ERROR":#token error 
      ..... 
     elif returnData == "RECORD_NOT_FOUND":#bad request 
      ...... 
     else: 
      ...... 

Jede Hilfe würde geschätzt. Vielen Dank!

Antwort

0

Ich habe diesen Code ausprobiert und es hat funktioniert.

import hashlib 
import json 
from django.core.cache import cache 
from .views import * 
class CacheService(): 
    def __init__(self, view=None, **kwargs): 
     self.data = kwargs 
     self.data.update({'view_name': view}) 
     self.key = self.prepare_key() 
    def prepare_key(self): 
     return hashlib.md5(json.dumps(self.data, sort_keys=True).encode('utf-8')).hexdigest() 
    def set_to_cache(self, qs): 
     cache.set(self.key, qs) 
    def unset_cache(self, qs): 
     cache.set(self.key, None) 
    def delete_key_value(self): 
     cache.delete(self.key) 
    def get_from_cache(self): 
     return cache.get(self.key, None) 
    def clear_all_cache(self): 
     cache.clear() 

Dieses cache.py Datei. Die zu cachende Ansicht ist unten angegeben:

class MyView(APIView): 
    def post(self,request,format=None): 
     ''' 

     ''' 
     Data=my_function() 
     cache_service = CacheService(qs_type='my_function()') 
     event_queryset = cache_service.get_from_cache() 
     if not event_queryset: 
      event_queryset = my_function() 
      cache_service.set_to_cache(event_queryset) 
     if event_queryset == "TOKEN_ERROR":#token error 
      ............ 
     elif event_queryset == "RECORD_NOT_FOUND":#bad request 
      ............. 
     else: 
      ......................