Mantık olarak aşağıdaki gibi bir yapı var elimde, kodun tamamını vermedim. Yapmak istediğim şu eğer decisionStatus TRUE dönerse bu yanıtı 1 yıl önbelleğe almak istiyorum ve sorgu_url değişkeninde aynı URL sorgu yapılırsa 1 yıl boyunca aynı yanıtı dönmek istiyorum. Çünkü bir kere decisionStatus TRUE olursa yani karar varsa bunun kısa vadede değişme şansı yok. Ama eğer decisionStatus FALSE ise sadece 10 dakika önbelleğe almak istiyorum ve aynı sorgu_url ile yani aynı URL ile sorgu yapılırsa 10 dakika boyunca aynı yanıtını dönmek istiyorum.
Bir türlü TRUE olanları 1 yıl, FALSE olanları 10 dakika önbelleğe alamadım. Önbelleğe alıyorum fakat her iki durum içinde 2-3 dakika sonra önbellek bitiyor.
Bu arada veritabanı kullanılmıyor, minik bir API servisi. sitem.com/sorgu/sorgusitesi.com şeklinde bir istek atıyor ve yanıt alıyorum.
Sunucu taraflı bu cache işlemini nasıl yapabilirim bir önerisi olan var mı? Django ile ilk çalışmam, çözemedim sorunu bir türlü.
from django.http import HttpResponse, JsonResponse
from django.views.decorators.cache import cache_page
from django.core.cache import cache
import json
cache_key = f"sorgu_{sorgu_url}"
cached_response = cache.get(cache_key)
if cached_response:
response_data = json.loads(cached_response)
response_data["isCache"] = True
return json.dumps(response_data, ensure_ascii=False).encode('utf-8')
if karar_durumu:
tarih_start_index = response.find(", ") + 2
tarih_end_index = response.find(" tarihli")
if tarih_start_index != -1 and tarih_end_index != -1:
karar_tarihi = response[tarih_start_index:tarih_end_index]
response_data = {
"queryUrl": sorgu_url,
"decisionStatus": karar_durumu,
"decision": response,
"decisionDate": karar_tarihi,
"isCache": False
}
json_data = json.dumps(response_data, ensure_ascii=False)
cache.set(cache_key, json_data, 60 * 60 * 24 * 365)
return json_data.encode('utf-8')
response_data = {
"queryUrl": sorgu_url,
"decisionStatus": karar_durumu,
"decision": response,
"decisionDate": None,
"isCache": False
}
json_data = json.dumps(response_data, ensure_ascii=False)
cache.set(cache_key, json_data, 60 * 10)
return json_data.encode('utf-8')