[컴][웹] 구글 앱 엔진 에서 memcache 사용하기–python

memcache 를 사용 해 보자.
https://developers.google.com/appengine/docs/python/memcache/usingmemcache
이것은 db query 를 자주 사용해서 생기게 되는 lack 에 대한 방지 대책이라고 볼 수 있겠다.
이것은 하나의 저장공간(memory 또는 varialbe) 정도로 생각하면 될 듯 하다. 그래서 variable 를 정의와 사용방법만 알면 쓰는데에 큰 문제는 없을 듯 하다.


사용방법

add() 또는 set_multi() 로 값을 set 할 수 있다.
gets() 로 원하는 key 값을 가져올 수 있다.

memcache.set_multi({ "melon": mc,            
                                 "billboard": bc},
                                 key_prefix="chart_", time=3600*24*7)
                                 
client = memcache.Client()
value = client.gets('chart_melon')  # OR client.get(key, for_cas=True)




memcache 소스 경로

memcache 의 소스는 아래 경로에서 찾아볼 수 있다.

c:\Program Files\Google\google_appengine\google\appengine\api\memcache



limit

  1. maximum size of chached data : 1MB - key size - 구현과 관련된 overhead(약 96 byte)
  2. key 사이즈는 250 bytes 이하 : 키(key) 는 250 bytes 이하여야 한다. python 에서는 250 bytes 를 넘는 string 들은 hased 된다. (runtime 마다 다르다.)
  3. 32MB : "multi" 라 부르는 batch 작업들에서 개수의 제한은 없다. 하지만 총 call 이나 fetched data 의 양이 32MB 를 넘지 말아야 한다.

Django 에서 memcache
# Corresponding Django view, "django-guestbook/guestbook/views.py"
from django.core.cache import cachefrom django.views.generic.simple import direct_to_templatefrom guestbook.forms import CreateGreetingForm
from guestbook.models import Greeting
def list_greetings(request):
    greetings = cache.get(MEMCACHE_GREETINGS)
    if greetings is None:
        greetings = Greeting.objects.all().order_by('-date')[:10]
        cache.add(MEMCACHE_GREETINGS, greetings)
    return direct_to_template(request, 'guestbook/index.html',
        {'greetings': greetings, 'form': CreateGreetingForm()})
google app engine 에서 Django framework 를 사용할 때 google app engine 의 memcache API 를 쓰지 않고 Django 의 cache 를 사용하고 있다. 이 방법이 platform-independent 해서 사용했다고 한다.[3][4]



References

  1. Using Memcache - Google App Engine — Google Developers
  2. Google App Engine — Google Developers
  3. https://developers.google.com/appengine/articles/django-nonrel
  4. https://docs.djangoproject.com/en/dev/topics/cache/


댓글 없음:

댓글 쓰기