• 20-05-2023, 20:41:10
    #1
    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')
  • 20-05-2023, 22:22:37
    #2
    Sanırım proje dosyalarında her değişiklik yaptığımda önbellek sıfırlanıyor.
  • 20-05-2023, 22:24:38
    #3
    🌐 𝘀𝗼𝗰𝗶𝗳𝗹𝘆.𝗰𝗼𝗺
    Xugart adlı üyeden alıntı: mesajı görüntüle
    Sanırım proje dosyalarında her değişiklik yaptığımda önbellek sıfırlanıyor.
    Proje dosyalarında değişiklik yaptığınızda sunucunuz resetlediği için cache silinir.
  • 20-05-2023, 22:47:28
    #4
    Şunu en tepeye ekleyip:
    from django.views.decorators.cache import cache_page


    Sonra:
    @cache_page(60 * 60 * 24 * 365)

    şeklinde dekoratör kodunu fonksiyonun başına yazman gerekiyor.
  • 20-05-2023, 23:17:00
    #5
    tolgasen adlı üyeden alıntı: mesajı görüntüle
    Proje dosyalarında değişiklik yaptığınızda sunucunuz resetlediği için cache silinir.
    Teşekkürler, Gunicorn + Docker ile deploy ettim fakat auto-deploy olduğunda da sıfırlanıyor gibi. Yayına aldığımda o kadar sorun olmaz ama sunucu çökerse bu durumda sürekli önbellek sıfırlanacak mı?
    MontyPython adlı üyeden alıntı: mesajı görüntüle
    Şunu en tepeye ekleyip:
    from django.views.decorators.cache import cache_page


    Sonra:
    @cache_page(60 * 60 * 24 * 365)

    şeklinde dekoratör kodunu fonksiyonun başına yazman gerekiyor.
    Bu şekilde tüm sayfayı 1 yıl önbelleğe almış olmuyor muyum?
  • 20-05-2023, 23:29:57
    #6
    O zaman dekoratör kullanmadan şöyle yapacaksın:

    if True:
    cache.set(cache_key, json_data, 60 * 60 * 24 * 365)
    else:
    cache.set(cache_key, json_data, 60 * 10)

    ====

    Yukarıya da şunu ekleyeceksin:
    from django.core.cache import cache
  • 20-05-2023, 23:32:34
    #7
    Tamam, zaten doğru yapmışım aslında. Benim atladığım nokta sunucu sıfırlanınca yani lokalde dosya düzenleyince önbellek sıfırlanıyormuş. Teşekkürler hocam, bir kaç konuma daha yardımcı olmuştunuz Python ile alakalı. Süpersiniz.