Django提供的6种缓存方式如下:
(1)开发调试缓存;
(2)内存缓存;
(3)文件缓存;
(4)数据库缓存;
(5)Memcache缓存(使用Python-memcached模块);
(6)Memcache缓存(使用pylibmc模块)。
常用的缓存方式是文件缓存和Mencache缓存。
(1)开发调试(此模式为开发调试时使用,在项目上线后不再执行任何操作)settings.py中的文件配置: CACHES = { 'default': { 'BACKEND': 'Django.core.cache.backends.dummy.DummyCache', # 缓存后台使用的引擎 'TIMEOUT': 300, # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大数量之后,剔除缓存数量的比例,即:1/CULL_FREQUENCY(默认3) }, }}
(2)内存缓存(将缓存内容保存至内存区域中),settings.py中的文件配置: CACHES = { 'default': { 'BACKEND': 'Django.core.cache.backends.locmem.LocMemCache',# 指定缓存使用的引擎 'LOCATION': 'unique-snowflake', # 写在内存中的变量的唯一值 'TIMEOUT':300, # 缓存超时时间(默认为300秒,None表示永不过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大数量之后,剔除缓存数量的比例,即: 1/CULL_FREQUENCY(默认3) } }}
(3)文件缓存(把缓存数据存储在文件中),settings.py中的文件配置: CACHES = { 'default': { 'BACKEND': 'Django.core.cache.backends.filebased.FileBasedCache',#指定缓存使用的引擎 'LOCATION': '/var/tmp/Django_cache', #指定缓存的路径 'TIMEOUT':300, #缓存超时时间(默认为300秒,None表示永不过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } }
Django可以将其缓存的数据存储在数据库中。 如果你有一个快速,索引良好的数据库服务器,这最好。
将数据库表用作缓存后端:
将BACKEND设置为django.core.cache.backends.db.DatabaseCache
将LOCATION设置为表名,即数据库表的名称。 这个名称可以是任何你想要的,只要它是一个尚未在数据库中使用的有效表名即可。在这个例子中,缓存表的名字是my_cache_table:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
在上面操作前,我们还没建好缓存表,所以首先我们应该创建好缓存表,使用如下命令,注意cache_table_name不要和数据库中已经存在的表名冲突:
python manage.py createcachetable [cache_table_name] #这里cache_table_name即为上面的my_cache_table
这将在您的数据库中创建一个表格,该表格采用Django的数据库缓存系统所需的适当格式。 该表的名称取自LOCATION。
如果您使用多个数据库缓存,createcachetable会为每个缓存创建一个表。
如果您使用多个数据库,createcachetable会观察数据库路由器的allow_migrate()方法。
像迁移一样,createcachetable不会触及现有的表。 它只会创建缺少的表格。
(5)Memcache缓存(使用Python-memcached模块连接Memcache)。 Memcached是Django原生支持的缓存系统。要使用Memcached,需要下载Memcached的支持库Python-memcached或pylibmc,settings.py中的文件配置: CACHES = { 'default': { 'BACKEND': 'Django.core.cache.backends.memcached.MemcachedCache', # 指定缓存使用的引擎 'LOCATION': '222.169.10.100:11211',# 指定Memcache缓存服务器的IP地址和端口 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大数量之后,剔除缓存数量的比例,即:1/CULL_FREQUENCY(默认3 } }} LOCATION也可以配置成如下: 'LOCATION': 'unix:/tmp/memcached.sock', # 指定局域网内的主机名加socket套接字为Memcache缓存服务器 'LOCATION': [ # 指定一台或多台其他主机IP地址加端口为Memcache缓存服务器 '222.169.10.100:11211', '222.169.10.101:11211', '222.169.10.102:11211', ]
(6)Memcache缓存(使用pylibmc模块连接Memcache),settings.py中的文件配置: CACHES = { 'default': { 'BACKEND': 'Django.core.cache.backends.memcached.PyLibMCCache',# 指定缓存使用的引擎 'LOCATION':'192.168.10.100:11211', # 指定本机的11211端口为Memcache缓存服务器 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大数量之后,剔除缓存数量的比例,即:1/CULL_FREQUENCY(默认3) }, }} LOCATION也可以配置成如下: 'LOCATION': '/tmp/memcached.sock', # 指定某个路径为缓存目录 'LOCATION': [ # 分布式缓存,在多台服务器上运行Memcached进程,程序会把多台服务器当作单独的缓存,而不会在每台服务器上复制缓存值 '192.168.10.100:11211', '192.168.10.101:11211', '192.168.10.102:11211', ] 注意:Memcached是基于内存的缓存,数据存储在内存中,如果服务器死机,数据就会丢失,所以Memcached一般与其他缓存配合使用。
7Redis缓存(依赖:pip3 install django-redis) 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} # "PASSWORD": "密码", } } }
具体的应用:
单独视图缓存:
方式一: 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)), ]
局部视图缓存:
a. 引入TemplateTag {% load cache %} b. 使用缓存 {% cache 5000 缓存key %} 缓存内容 {% endcache %}