django的缓存实现

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 %}

  

 参考:https://www.cnblogs.com/renpingsheng/p/7563360.html