Django 缓存机制
缓存作用当一个网站的并发量特别高的时候,频繁的对数据库进行增删查改操作势必会让访问速度变慢,此时你可以选择使用缓存来减小服务器的压力,但是缓存不要滥用,因为它可能会导致脏数据的出现。 缓存说白了就是将你的数据存放到另一个地方,下次再去拿这些数据时将不再进行数据库查询,而是直接从缓存中取出数据并返回给用户。 Django缓存在@H_301_9@Django中,你可以将数据缓存到下面六种地方:
经常使用的有文件缓存、以及@H_301_9@Memcache缓存。 开发调试此模式为开发调试使用,实际上不执行任何操作。 @H_301_9@settings.py中进行配置: @H_301_9@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)(随机删除) },} } 内存缓存此模式将会把数据存放至内存中。 @H_301_9@settings.py中进行配置: @H_301_9@CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',# 指定缓存使用的引擎 'LOCATION': 'unique-snowflake',# 写在内存中的变量的唯一值 'TIMEOUT': 300,# 缓存超时时间(默认为300秒,None表示永不过期) 'OPTIONS': { 'MAX_ENTRIES': 300,# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } } 文件缓存此模式将会把数据存放至文件中,以文件路径作为@H_301_9@key。 @H_301_9@settings.py中进行配置: @H_301_9@CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',# 指定缓存使用的引擎 'LOCATION': '/var/tmp/django_cache',# 指定缓存的路径 'TIMEOUT': 300,# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } } 数据库缓存此模式将会把数据存放至数据库中。 @H_301_9@settings.py中进行配置: @H_301_9@CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache',# 指定缓存使用的引擎 'LOCATION': 'cache_table',# 数据库表 'OPTIONS': { 'MAX_ENTRIES': 300,# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } } 需要注意的是,在创建完数据库缓存后还需要手动执行一条命令: @H_301_9@python manage.py createcachetable Memcache缓存(python-memcached)@H_301_9@Memcached是@H_301_9@Django原生支持的缓存系统.要使用@H_301_9@Memcached,需要下载@H_301_9@Memcached的支持库@H_301_9@python-memcached或@H_301_9@pylibmc. 下面是使用@H_301_9@python-memcached时的配置。 @H_301_9@settings.py中进行配置: @H_301_9@CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',# 指定缓存使用的引擎 'LOCATION': '192.168.10.100:11211',# 指定Memcache缓存服务器的IP地址和端口 'OPTIONS': { 'MAX_ENTRIES': 300,# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } } @H_301_9@LOCATION也可以配置成如下: @H_301_9@'LOCATION': 'unix:/tmp/memcached.sock',# 指定局域网内的主机名加socket套接字为Memcache缓存服务器 'LOCATION': [ # 指定一台或多台其他主机ip地址加端口为Memcache缓存服务器 '192.168.10.100:11211','192.168.10.101:11211','192.168.10.102:11211',] Memcache缓存(pylibmc)使用@H_301_9@pylibmc模块连接@H_301_9@memcache。 @H_301_9@settings.py中进行配置: @H_301_9@CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',# 指定本机的11211端口为Memcache缓存服务器 'OPTIONS': { 'MAX_ENTRIES': 300,# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) },} } @H_301_9@LOCATION也可以配置成如下: @H_301_9@'LOCATION': '/tmp/memcached.sock',# 指定某个路径为缓存目录 'LOCATION': [ # 分布式缓存,在多台服务器上运行Memcached进程,程序会把多台服务器当作一个单独的缓存,而不会在每台服务器上复制缓存值 '192.168.10.100:11211',] @H_301_9@Memcached是基于内存的缓存,数据存储在内存中,所以如果服务器死机的话数据就会丢失,所以@H_301_9@Memcached一般与其他缓存配合使用。 缓存粒度@H_301_9@Django提供了不同粒度的缓存,可以缓存某个页面,可以只缓存一个页面的某个部分,甚至可以缓存整个网站。 下面将使用文件缓存的形式做演示(这是针对不分离开发时所使用的): @H_301_9@CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } } 单页面缓存在视图函数上加装饰器 @H_301_9@from django.views.decorators.cache import cache_page @cache_page(5) # 缓存5s钟 def test_cache(request): import time ctime=time.time() return render(request,'index.html',context={'ctime':ctime}) 现在,当你五秒钟之内进行访问,时间将会一成不变。 局部缓存在一个模板中,使用@H_301_9@tag进行局部缓存: @H_301_9@<p>未进行缓存:{{ ctime }}</p> <hr> <!--导入tage--> {% load cache %} <!--5表示5s钟,name是唯一key值--> {% cache 5 'name' %} {{ ctime }} {% endcache %} 现在,你将看到未缓存的部分一直在刷新时间,而缓存部分将不刷新。 全站缓存@H_301_9@MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware',# 这个放在最上面 ... # 其他中间件 'django.middleware.cache.FetchFromCacheMiddleware',# 这个放在最下面 ] CACHE_MIDDLEWARE_SECONDS=10 # 全站缓存时间 现在,你将看到所有的视图返回的页面都将10秒内刷新一次。 调用缓存导入缓存,你可以像操纵字典一样操纵它,你可以将它当作一个全局字典一样使用,可以缓存任何数据类型,需要注意的是@H_301_9@key必须是唯一的。: @H_301_9@from django.core.cache import cache 下面是缓存的一些常用操作方法: 方法 |
描述 |
|