zoukankan      html  css  js  c++  java
  • Django缓存

    一、Django六种缓存方式(都是在settings中设置)

    1、开发调试(开发调试使用,实际不做任何操作)

    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)
                   },
                 'KEY_PREFIX': '',                                        # 缓存key的前缀(默认空)
                 'VERSION': 1,                                            # 缓存key的版本(默认1)
                 'KEY_FUNCTION' 函数名                                     # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
                }
            }
    
     # 自定义key 可用于‘KEY_FUNCTION'
        def default_key_func(key, key_prefix, version):
            """
              自定义生成key的函数
            """
            return '%s:%s:%s' % (key_prefix, version, key)
        
        
        def get_key_func(key_func):
            """
            如果key_func是空
            默认使用 default_key_func
            否则,则使key_func函数
            """
            if key_func is not None:
                #检查该函数是否可以调用
                if callable(key_func):
                    return key_func
                else:
                    return import_string(key_func)
            return default_key_func

    2、内存缓存

    # 此缓存将内容保存至内存的变量中
        # 配置:
            CACHES = {
                'default': {
                    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                    'LOCATION': 'unique-snowflake',  #设置一个唯一值
                }
            }
        # 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可

    3、文件缓存(适合小网站)

    CACHES = {
         'default': {
              'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
              'LOCATION': '/var/tmp/django_cache',  #缓存文件路径
              }
         }
    #其他配置跟开发调试一样

    4、数据库

    CACHES = {
        'default': {
              'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
              'LOCATION': 'my_cache_table', # 数据库表
            }
       }
    #其他设置跟开发调试的一样

    5.1、Memcache缓存(python-memcached模块)

     #方式1  
     CACHES = {
         'default': {
             
             'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
             'LOCATION': '127.0.0.1:11211', #指定缓存服务器IP地址和端口
           }
       }
      #方式2
      CACHES = {
          'default': {
             'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    # 指定指定局域网内的主机名加socket套接字为Memcache缓存服务器
    'LOCATION': 'unix:/tmp/memcached.sock', } } # 方式3 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ #指定一台或多台主机IP地址和端口为缓存服务器 '172.19.26.240:11211', '172.19.26.242:11211', ] } } # 方式4 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ #以元组的形式,第一个放缓存服务器的IP跟端口 #第二个参数放权重 ('172.19.26.240:11211',5), ('172.19.26.242:11211',1) ] } }
    # 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可

    5.2、Memcache缓存(pylibmc模块)

    #方式1
    CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
                'LOCATION': '127.0.0.1:11211', #指定IP和端口为缓存服务器
            }
        }
    # 方式2
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
             #指定局域网内的主机名加socket套接字为Memcache缓存服务器
            'LOCATION': '/tmp/memcached.sock',
            }
        }   
    #方式3
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
             'LOCATION': [
                 #分布式缓存,程序会把以下多台服务器当作一个单独的缓存,
                 #不会再每台服务器上复制缓存值
                 '172.19.26.240:11211',
                 '172.19.26.242:11211',
              ]
           }
      }
    # 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可

    6、Redis缓存(需要安装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_redis import get_redis_connection conn = get_redis_connection("default")

    二、缓存应用

    1、前后端混合开发使用

    (1)全站缓存

     在settings文件中的中间件最上跟最下分别配置一个update,fetch中间件

    MIDDLEWARE = [
            # Update必须放在第一个,
            'django.middleware.cache.UpdateCacheMiddleware',
            # 其他中间件...
            #Fetch必须放在最后一个
            'django.middleware.cache.FetchFromCacheMiddleware',
        ]  
    CACHE_MIDDLEWARE_SECONDS = 10  #全站缓存的时间
    
    

    (2)单页面缓存

    #方法一:在视图函数上加装饰器
    from django.views.decorators.cache import cache_page
    @cache_page(5) #缓存5秒
    def test(request):
        ctime=time.time()
        return render(request,'test.html',locals())
    
    #方法二:在路由上配置装饰器
    from django.views.decorators.cache import cache_page
    urlpatterns=[
        url(r'test',cache_page(5)(views.test)),
    ]

    (3)页面局部缓存

    # a. 引入TemplateTag
            {% load cache %}
    # b. 使用缓存
            {% cache 5000 缓存key %}
                缓存内容
            {% endcache %}
    
    #例子:
        {% load cache %}
        #    key可以随便取
        {% cache 10 'name' %}
        <h2>{{ ctime }}</h2>
        {% endcache %}

    2、前后端分离的使用

    from django.core.cache import cache
    cache.set('key',value可以是任意数据类型)
    cache.get('key')
    #例子
    from django.core.cache import cache
    def test(request):
        if cache.get('key'):
            ctime=cache.get('key')
           
        else:
            ctime=time.time()
            cache.set('key',ctime)
        return render(request,'test.html',locals())
  • 相关阅读:
    vim python extension
    aws msk
    Install python3
    sns
    inventory
    批量添加监听端口
    template screen
    DNS name
    add jar and proxy repo
    模型诊断论文心得
  • 原文地址:https://www.cnblogs.com/nq31/p/13970508.html
Copyright © 2011-2022 走看看