参考博客:https://www.cnblogs.com/xiaonq/p/7978402.html#i6

  1. 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显
  2. 缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作
  3. 而是直接从内存或者Redis中之前缓存的内容拿到,并返回

2、Django中提供了6种缓存方式


  • 1.开发调试缓存
# 开发调试缓存(虽然配置上,但实际没有缓存,还是到数据库取)

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 引擎

        #注: 下面这些参数时公用的,五种缓存都可以使用
        'TIMEOUT': 300,           # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
        'OPTIONS':{
            'MAX_ENTRIES': 300,   # 最大缓存个数(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例(3就是1/3)
        },
    }
}

  • 2.内存缓存
# 注:内存缓存本质上就是在内存中维护一个字典,所存储的形式就是字典的键值对组合

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',     #这个参数指定变量名必须唯一
    }
}

  • 3.文件缓存
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR,'cache'),  #缓存内容存放的文件夹路径
    }
}

  • 4.数据库缓存
# 注:执行创建表命令 python manage.py createcachetable

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table', # 数据库表名(名字是自己取的)
    }
}


  • 5: Memcache缓存 两种
# 注:Memcache缓存有两个模块:python-memcached模块、 pylibmc模块


CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',          #使用ip加端口连接memcached
    }
}

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'unix:/tmp/memcached.sock',     #以文件的形式连本地memcached
    }
}

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [               # memcached天生支持集群
            #1 均衡分配
            '172.19.26.240:11211',
            '172.19.26.242:11211',
            #2 调整权重(权重和请求比例成正比)
            ('172.19.26.240:11211',1),
            ('172.19.26.242:11211',10),
        ]
    }
}


# 注: pylibmc模块只改变上面'BACKEND'配置为下面样式即可
# 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',