Django中缓存的学习

官方中文链接地址:https://docs.djangoproject.com/en/2.0/topics/cache/

Django 官方关于cache的介绍:https://docs.djangoproject.com/en/dev/topics/cache/

记录一下django的缓存,用到是直接拿来,O(∩_∩)O

1、Memcached

在Django中使用Memcached:

  • 设置BACKEND为 django.core.cache.backends.memcached.MemcachedCachedjango.core.cache.backends.memcached.PyLibMCCache(取决于您选择的memcached绑定)
  • 设置LOCATIONip:port值,其中ip是Memcached守护程序的IP地址,port是运行Memcached的端口,或者是unix:path值,其中 path是Memcached Unix套接字文件的路径。

Memcached使用python-memcached绑定在localhost(127.0.0.1)端口11211上运行的:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

在此示例中,Memcached可通过/tmp/memcached.sock使用python-memcached绑定的本地Unix套接字文件 获得:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'unix:/tmp/memcached.sock',
    }
}

使用pylibmc绑定时,请不要包含unix:/前缀:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': '/tmp/memcached.sock',
    }
}

分布式缓存:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '172.19.26.240:11211',
            '172.19.26.242:11212',
            '172.19.26.244:11213',
        ]
    }
}

2、数据库缓存

将数据库表用作缓存:

  • 设置BACKEND为 django.core.cache.backends.db.DatabaseCache
  • 设置LOCATIONtablename,数据库表的名称。此名称可以是您想要的任何名称,只要它是一个尚未在您的数据库中使用的有效表名。

在此示例中,缓存表的名称为my_cache_table

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

创建缓存表

在使用数据库缓存之前,必须使用以下命令创建缓存表:

python manage.py createcachetable

3、文件系统缓存

 

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',
    }
}

windows环境:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': 'c:/django/tem/django_cache',
    }
}

4、本地内存缓存

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
    }
}

5、开发使用的缓存

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

 

缓存参数

可以为每个缓存后端提供额外的参数来控制缓存行为。这些参数作为设置中的附加键提供 CACHES。有效参数如下:

  • TIMEOUT:用于缓存的默认超时(以秒为单位)。此参数默认为300秒(5分钟)。您可以设置TIMEOUTNone默认情况下缓存键永不过期。值0使得键立即过期(实际上“不缓存”)。

  • OPTIONS:应该传递给缓存后端的任何选项。有效选项列表将随每个后端而变化,由第三方库支持的缓存后端将直接将其选项传递给基础缓存库。

    实现自己的扑杀战略(即缓存后端locmemfilesystem以及database后端)将履行下列选项:

    • MAX_ENTRIES:删除旧值之前缓存中允许的最大条目数。此参数默认为300

    • CULL_FREQUENCYMAX_ENTRIES达到时剔除的条目部分。实际比率是 ,设置为在达到时剔除一半条目。此参数应为整数,默认为。1 / CULL_FREQUENCYCULL_FREQUENCY2MAX_ENTRIES3

      0for CULL_FREQUENCY表示在MAX_ENTRIES到达时将转储整个缓存。在一些后端(database尤其是)这使得扑杀 以更高速缓存未命中的代价更快。

    Memcached后端将OPTIONS as关键字参数的内容传递给客户端构造函数,从而允许对客户端行为进行更高级的控制。例如,请参见下文。

  • KEY_PREFIX:一个字符串,将自动包含(默认情况下预先添加)到Django服务器使用的所有缓存键。

  • VERSION:Django服务器生成的缓存键的默认版本号。

  • KEY_FUNCTION 包含函数的虚线路径的字符串,用于定义如何将前缀,版本和密钥组合为最终缓存键。

在此示例中,正在配置文件系统后端,超时为60秒,最大容量为1000个项目:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',
        'TIMEOUT': 60,
        'OPTIONS': {
            'MAX_ENTRIES': 1000
        }
    }
}

以下是python-memcached基于后端的示例配置,对象大小限制为2MB:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'OPTIONS': {
            'server_max_value_length': 1024 * 1024 * 2,
        }
    }
}

以下是pylibmc基于后端的示例配置,该后端支持二进制协议,SASL身份验证和ketama行为模式:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
        'OPTIONS': {
            'binary': True,
            'username': 'user',
            'password': 'pass',
            'behaviors': {
                'ketama': True,
            }
        }
    }
}

A:整个站点缓存:

在settings.py的中间件中加上django.middleware.cache.UpdateCacheMiddleware和

django.middleware.cache.FetchFromCacheMiddleware,这两个的位置不能变。

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    .......
    'django.middleware.cache.FetchFromCacheMiddleware',
]

B:视图缓存

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)

def my_view(request)

       return render(request,'index.html')

cache参数可以设置使用CACHES中的哪一个cache系统,默认是default:

@cache_page(60 * 15, cache="special_cache")

def my_view(request):

    ...

key_prefix参数和CACHE_MIDDLEWARE_KEY_PREFIX设置起得作用相同:

@cache_page(60 * 15, key_prefix="site1")

def my_view(request):

    ...

 

可以在url中使用此方法:

from django.views.decorators.cache import cache_page

urlpatterns = [

    url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),

]

C:模板片段缓存

 

{% load cache %}

{% cache 500 sidebar %}

 .. sidebar ..

{% endcache %}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值