zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    每天一个linux命令(权限):【转载】chgrp命令
    每天一个linux命令(权限):【转载】chmod命令
    每天一个linux命令(文件上传下载文件操作):【转载】gzip命令
    jsplumb 常用事件
    MarkDown
    el-menu 菜单展示
    sourcetree的使用
    git
    LTE FDD EPC网络规划设计与优化(“十二五”国家重点图书出版规划项目)
    详解UG NX9.0标准教程
  • 原文地址:https://www.cnblogs.com/topass123/p/12951082.html
Copyright © 2011-2022 走看看