Django笔记-Cache

本文介绍了Django中的缓存系统,包括Memcached的安装与配置、数据库缓存、文件系统缓存、本地内存缓存、开发用的假缓存、全局网站缓存、视图级别的缓存、模板片段缓存以及低级缓存API的使用方法。详细讲解了如何设置CACHE_BACKEND参数以及各种缓存策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.设定cache
cache可以设定为3中级别:数据库,文件,内存。
设定cache可以在setting.py中修改CACHE_BACKEND变量来修改。

2. 安装Memcached
毋庸置疑memory cache是最快的缓存了。安装相关步骤如下:
1)安装Memcached 网站:http://danga.com/memcached/
2)安装Memcached Python bindings,有两个版本可供选择
 a)cmemcache :http://gijsbert.org/cmemcache/ .
 b)python-memcache:http://www.danga.com/memcached/
3)配置CACHE_BACKEDND
配置Memcached的IP和端口。如下所示,Memcached支持多服务器互联。
如果设置多个IP,Memcached会将这些主机视为一个整体。
CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/'

Note:Memcached的缺点,因为时内存cache,所以服务器down时,会丢失。

3.Database Caching
1)创建cache数据库
python manage.py createcachetable [cache_table_name]
2)配置CACHE_BACKEND
CACHE_BACKEND = 'db://cache_table_name'

Note:数据库缓存后端使用settings文件指定的同一数据库,并且只能是相同的.即指定为sqlite则,缓存也是用它。

4.Filesystem  Caching
1)设置cache目录
以file://开头。例子:若linux设置为/var/tmp/django_cache目录
则指定:CACHE_BACKEND='file:///var/tmp/django_cache
若为windows,指定:c:/foo/bar目录
则指定为:file://c:/foo/bar

Note:指定的目录需要确保可读写。

5.Local-Memory Caching
如果没有条件安装Memcached,那么Local-Memory也是个不错的选择。
简单方便,只是该方法cache能力比较弱。设置方法:
CACHE_BACKEND = 'locmem:///'

6.Dummy Caching(For Development)
该设置是为了开发有cache的站点,但是在开发时不想cache来实现的。
设置方法:
CACHE_BACKEND = 'dummy:///'

7.CACHE_BACKEND参数设定
CACHE_BACKEND可以设定超时、最大cache数、达到最大数时的删除比率等参数。例子:

CACHE_BACKEND = 'memcached://127.0.0.1:1121/?timeout=30&max_entries=400&cull_percentage=2'
该值设定了超时30s,最大400个,当超时时删除1/2的内容。

8.The Per-Site Cache
最简单的方法就是整站cache了。只需要添加以下MiddleWare即可。
1)MIDDLEWARE_CLASSES = {
 'django.middleware.cache.UpdateCacheMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware’,
}
Note:按照常理,类的排序按照alphabetical比较好,这里必须把UpdateCacheMiddleware
排在最上面,可以参见http://www.djangobook.com/en/2.0/chapter15/#order-of-middleware-classes
2)添加cache设定
 a)CACHE_MIDDLEWARE_SECONDS-每个页面cache的时间单位/s
 b)CHAHE_MIDDLEWARE_KEY_PREFIX 如果缓存被多个使用相同Django安装的网站所共享,
 那么把这个值设成当前网站名,或其他能代表这个Django实例的唯一字符串,以避免key发生冲突。如果你不在意的话可以设成空字符串。

Notes:
1)缓存中间件缓存每个没有GET或者POST参数的页面,即如果用户请求页面并在查询字符串里传递GET参数或者POST参数,
中间件将不会尝试得到缓存版本的页面,如果你打算使用整站缓存,设计你的程序时牢记这点,例如,
不要使用拥有查询字符串的URLs,除非那些页面可以不缓存
2)可以只对匿名用户缓存,设置CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True

9.The Per-View Cache
1)定义Per-view cache
django.views.decorators.cache 中定义了一个cache_page装饰着,可以用来cache view。
例子:
from django.views.decorators.cache import cache_page

def my_view(request):
 #....
 
my_view = cache_page(my_view,60*15)

当然也可以用python的decorator语法:
@cache_page(60*15)
def my_view(request):
 #...
2)通过URL指定view cache
1)中的例子时通过硬编码实现的cache,这显然不是好的方法。如果向将views用在没有cache的
站点中,则不能复用。以下时推荐的方法:
from django.views.decorator.cache import cache_page

urlpatterns = patterns("",
 (r'^foo/(/d{1,2})/$,cache_page(my_view,60*15)),
)

10.Templage Fragment Caching
例子:
#footemplate.html
{% load cache %}
#.....
{% cache 500 sidebar %}
...sidebar...
{% endcache %}

11.The Low-Level Cache API
很多时候并不是想cache整个page,或者一些view也不适合整个cache。这时候就会用到
Django提供的低级的API接口。它可以cache所有的东东。例子:
from django.core.cache import cache
cache.set('my_key','hello,world!',30)#设定cache变量my_key,cache 30s,如果time不设置,则默认为setting中设置的值。
cache.get('my_key','has expired')#取出cache的my_key变量,如果过期,则返回has expired
cache.add('add_key', 'new value')#如果add_key过期,则设置新的为new value,否则不会添加

#设置多个接口例子:
cache.set('a',1)
cache.set('b',2)
cache.get_many(['a','b'])返回一个字典
{'a':1,'b':2}

11.更多cache
还有很多可用的cache相关资源。这里不再记述。
<END>

 

Django中配置MySQL和Redis数据库的步骤如下: 1. 配置MySQL数据库: 在Django的配置文件中,找到DATABASES字典,将其配置为如下所示: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'HOST': 'xxxxxxxxxx', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'xxxxxxxxx', # 数据库用户密码 'NAME': 'test' # 数据库名字 } } ``` 其中,'HOST'是数据库主机的地址,'PORT'是数据库端口号,'USER'是数据库用户名,'PASSWORD'是数据库用户密码,'NAME'是数据库名字。根据实际情况进行相应的配置。\[1\] 2. 配置Redis数据库: 在Django的配置文件中,找到CACHES字典,将其配置为如下所示: ```python CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://xxxxxxxxx:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "123456" } }, "session": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://xxxxxxxxx:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "123456" } }, } SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "session" ``` 其中,"default"是默认缓存配置,"session"是用于存储session值的配置。在"LOCATION"中配置Redis的连接地址和端口号,"PASSWORD"是Redis的密码。根据实际情况进行相应的配置。\[2\] 以上是配置MySQL和Redis数据库的基本步骤,根据实际情况进行相应的修改和配置。同时,还需要确保已经安装了相应的数据库驱动和Redis客户端。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [Django笔记-Django下配置MySQL、Redis数据库](https://blog.youkuaiyun.com/adminwg/article/details/126141266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Docker打包部署Django+Mysql+Redis+Daphne+Gunicorn+Nginx+Jenkins+Vue前端](https://blog.youkuaiyun.com/zh_admini/article/details/123795383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值