django 缓存cache配置注意事项

最近在个人项目优化的过程中,发现自己重新踩了一下缓存配置的坑,转念一想索性在博客上留存一份资料以备日后随时反查,也给各位正在学习或使用django的朋友提个醒。

配置缓存CACHES

关于配置这块,目前百度Google差不多都清一色的是复制粘贴呢,就没有人发现有时候settings里面根本没有CACHES这个配置么?搞得很多刚学习的小伙伴找半天都不知道可以自己创建。。。没错!如果你在settings里面没发现CACHES的配置信息,是要自己创建的。

目前django支持6种类型的缓存方式:

  • 开发测试(默认)
  • 文件
  • 内存
  • 数据库
  • memcache缓存(分为python-memcache模块和pylibmc模块两种方式)
  • redis(需要额外pip install django-redis)

开发测试模式配置:

CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎
                'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期)
                'OPTIONS':{
                    'MAX_ENTRIES': 300,      # 最大缓存个数(默认300)
                    'CULL_FREQUENCY': 3,    
          # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
                },
                'KEY_PREFIX': '',   # 缓存key的前缀(默认空)
                'VERSION': 1,         # 缓存key的版本(默认1)
                'KEY_FUNCTION' 函数名  # 生成key的函数(默认生成 前缀:版本:key)
            }
        }

内存模式:

注意:其实不同模式要更改的只是引擎,其他设置如“TIMEOUT”、“OPTION”等都是通用的!!所以下面只给出变更的部分!!

'default': {
                'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                'LOCATION': 'unique-snowflake',
            }

文件模式:

CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
                'LOCATION': '/var/tmp/django_cache',
                #这里给出的是路径,但是更多时候是在项目根目录创建个文件夹,然后直接
                os.path.join(BASE_DIR,‘文件夹名称’)
            }
        }

数据库:

CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
                'LOCATION': 'my_cache_table', # 要先创建个数据库表才能指定路径
            }
        }

Memcache缓存:

python-memcache模块:

CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': [
                '172.19.26.240:11211',
                '172.19.26.242:11211',
                #可以添加多个地址,也可以只添加一个
            ]
        }
    }

或:

 CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': 'unix:/tmp/memcached.sock',
        }
    }   

pylibmc模块:

用法和上面一样,只是引擎换了:

 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',

redis缓存:

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

        }
    }
}

使用方法:因为redis不是django内置支持的,所以使用方法略不同:
在views.py中:

from django_redis import get_redis_connection
conn = get_redis_connection("default")

使用缓存:

一、全局使用(利用中间件):
由于中间件有固定的顺序执行,所以我们始终在获得最终的请求或返回处设置缓存。

MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',
        #在返回的response中加入到缓存

                            # 其他中间件...

        'django.middleware.cache.FetchFromCacheMiddleware',
        #在接收到的request请求中加入到缓存
    ]

    CACHE_MIDDLEWARE_ALIAS = ""
    CACHE_MIDDLEWARE_SECONDS = ""
    CACHE_MIDDLEWARE_KEY_PREFIX = ""

二、单独在views中使用:

from django.views.decorators.cache import cache_page

        @cache_page(100)  #100表示的是缓存失效时间
        def index(request):

三、在局部模板中使用:
你也可以直接在自己的前端页面中插入:

{% load cache %}
#要在页码顶部先引入
        {% cache 100 k1 %}  #100是失效时间,k1是缓存的key
            缓存内容
        {% endcache %}

PS:
你当然可以直接在urls.py里设置缓存,但是这会让url对应视图的代码显得臃肿,个人不太建议这样做:

from django.views.decorators.cache import cache_page

        urlpatterns = [
            url(r'^foo/([0-9]{1,2})/$', cache_page(100)(my_view)),
        ]

猜你喜欢

转载自blog.csdn.net/weixin_42833042/article/details/82528631