ich bin gerade dabei ein wenig mit memcached und db_cache zu spielen.
Um zu überprüfen welche Abfragen kommen, habe ich mich erstmal für db_cache entschieden.
Ich dachte es wäre ganz einfach, wenn ich ein Objekt benötige, schaue ich ob es im Cache ist und wenn nicht, starte ich eine Abfrage und schieb es in den Cache.
Nun, das ganze funktioniert auch soweit. Doch wenn ich das originale SQL Object in den Cache lege, starte er dennoch immer eine Abfrage auch wenn ich es aus dem Cache lade.
Die View:
Code: Alles auswählen
def highscore(request, page=1):
cache_check = cache.get('highscore')
if cache_check:
highscore = cache_check
else:
highscore = list.objects.filter()
cache.set('highscore',highscore,24*60*60)
cache_check = cache.get('city_list')
if cache_check:
city_list = cache_check
else:
city_list = stadtteile.objects.all().order_by("name")
cache.set('city_list',city_list,6*60*60)
return game_render(request, 'highscore/highscore.html',{'highscore':highscore, 'current_page':int(page),'city_list':city_list})
Code: Alles auswählen
SELECT cache_key, value, expires FROM dbcache WHERE cache_key = highscore 0.001
SELECT `highscore_list`.`id`,`highscore_list`.`uid`,`highscore_list`.`name`,`highscore_list`.`punkte`,`highscore_list`.`premium`,`highscore_list`.`bande_name`,`highscore_list`.`city_id` FROM `highscore_list`
Da ich mir schon dachte, dass es am Objekt liegt habe ich mir ein Workaround gebaut:
Code: Alles auswählen
def highscore(request, page=1):
cache_check = cache.get('highscore')
if cache_check:
caching = cache_check
else:
highscore = list.objects.filter()
caching = []
for data in highscore:
array = {'id':data.id,'uid':data.uid,'name':data.name,'premium':data.premium,'punkte':data.punkte,'bande_name':data.bande_name,'city_id':data.city_id}
caching.append(array)
cache.set('highscore',caching,24*60*60)
cache_check = cache.get('city_list_highscore')
if cache_check:
city_list_cache = cache_check
else:
query = stadtteile.objects.all().order_by("name")
city_list_cache = []
for data in query:
array = {'id':data.id,'name':data.name}
city_list_cache.append(array)
cache.set('city_list_highscore',city_list_cache,24*60*60)
return game_render(request, 'highscore/highscore.html',{'highscore':caching, 'current_page':int(page),'city_list':city_list_cache})
Gibt es vielleicht eine einfachere Methode?
Danke