欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

django 缓存cache配置注意事项

程序员文章站 2022-03-08 14:07:33
...

最近在个人项目优化的过程中,发现自己重新踩了一下缓存配置的坑,转念一想索性在博客上留存一份资料以备日后随时反查,也给各位正在学习或使用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)),
        ]
相关标签: django cache