简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中,当用户再次请求时,直接去缓存中拿,避免对数据库的频繁操作,加快数据的显示时间,需要知道的是,缓存里面的数据一般都设置有超时时间,缓存一般用在数据变化不大,实时率不高的情况下。
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内(默认配置)再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。
- 开发调试
- 内存
- 文件
- 数据库
- Memcache缓存(python-memcached模块)
- Memcache缓存(pylibmc模块)
| |
| |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', |
| 'TIMEOUT': 300, |
| 'OPTIONS':{ |
| 'MAX_ENTRIES': 300, |
| 'CULL_FREQUENCY': 3, |
| }, |
| 'KEY_PREFIX': '', |
| 'VERSION': 1, |
| 'KEY_FUNCTION' 函数名 |
| } |
| } |
| |
| def default_key_func(key, key_prefix, version): |
| """ |
| Default function to generate keys. |
| |
| Constructs the key used by all other methods. By default it prepends |
| the `key_prefix'. KEY_FUNCTION can be used to specify an alternate |
| function with custom key making behavior. |
| """ |
| return '%s:%s:%s' % (key_prefix, version, key) |
| |
| def get_key_func(key_func): |
| """ |
| Function to decide which key function to use. |
| |
| Defaults to ``default_key_func``. |
| """ |
| if key_func is not None: |
| if callable(key_func): |
| return key_func |
| else: |
| return import_string(key_func) |
| return default_key_func |
| |
| |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', |
| 'LOCATION': 'unique-snowflake', |
| } |
| } |
| |
| |
| |
| |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', |
| 'LOCATION': '/var/tmp/django_cache', |
| } |
| } |
| |
| |
| |
| |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', |
| 'LOCATION': 'my_cache_table', |
| } |
| } |
| |
| |
| |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', |
| 'LOCATION': '127.0.0.1:11211', |
| } |
| } |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', |
| 'LOCATION': 'unix:/tmp/memcached.sock', |
| } |
| } |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', |
| 'LOCATION': [ |
| '172.19.26.240:11211', |
| '172.19.26.242:11211', |
| ] |
| } |
| } |
| |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', |
| 'LOCATION': '127.0.0.1:11211', |
| } |
| } |
| |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', |
| 'LOCATION': '/tmp/memcached.sock', |
| } |
| } |
| |
| CACHES = { |
| 'default': { |
| 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', |
| 'LOCATION': [ |
| '172.19.26.240:11211', |
| '172.19.26.242:11211', |
| ] |
| } |
| } |
| CACHES = { |
| "default": { |
| "BACKEND": "django_redis.cache.RedisCache", |
| "LOCATION": "redis://127.0.0.1:6379", |
| "OPTIONS": { |
| "CLIENT_CLASS": "django_redis.client.DefaultClient", |
| "CONNECTION_POOL_KWARGS": {"max_connections": 100} |
| |
| } |
| } |
| } |
| |
| from django_redis import get_redis_connection |
| conn = get_redis_connection("default") |
| """ |
| 使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存 |
| """ |
| MIDDLEWARE = [ |
| 'django.middleware.cache.UpdateCacheMiddleware', |
| |
| 'django.middleware.cache.FetchFromCacheMiddleware', |
| ] |
| |
| CACHE_MIDDLEWARE_ALIAS = "" |
| CACHE_MIDDLEWARE_SECONDS = "" |
| CACHE_MIDDLEWARE_KEY_PREFIX = "" |
| |
| from django.views.decorators.cache import cache_page |
| |
| @cache_page(60 * 15) |
| def my_view(request): |
| ... |
| |
| from django.views.decorators.cache import cache_page |
| |
| urlpatterns = [ |
| url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)), |
| ] |
| |
| {% load cache %} |
| |
| {% cache 5000 缓存key %} |
| 缓存内容 |
| {% endcache %} |