Django缓存清理和缓存设置

缓存清理

方法很多,提供两个思路
1、直接去清理用来存缓存的介质,如memcached、redis()
2、自己写程序脚本清空。

3、使用django-extensions来清空缓存

2、自己写程序脚本清空
步骤:
1、给manage.py添加自定义命令,用来执行写好的脚本。

python manage.py cleancache #清空缓存
+
+obj
±-obj
±-app01
–management
–commandes
– cleancache .py

如上目录在app下新建management目录,management下在建立commandes目录用来存cleancache .py脚本

脚本内容
from django.core.management.base import BaseCommand, CommandError
from django.core.cache import caches
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument(
‘-n’,
‘–name’,
action=‘store’,
dest=‘name’,
default=‘default’,
help=‘clean django cache’,
)
def handle(self, *args, **options):
try:
if options[‘name’]:
cache = caches[options[‘name’]]
cache.clear()
self.stdout.write(self.style.SUCCESS(‘缓存清理成功’)
except Exception, ex:
self.stdout.write(self.style.ERROR(‘命令执行出错’))

使用命令
python manage.py clean_cache defualt, 就能清空memcacahe中default的缓存。defualt为setting.py设置的缓存中间件别名

Setting.py
REDIS_TIMEOUT=246060
CUBES_REDIS_TIMEOUT=6030
NEVER_REDIS_TIMEOUT=365
246060
CACHES= {‘default’: {
‘BACKEND’: ‘django_redis.cache.RedisCache’,
‘LOCATION’: ‘redis://localhost:6379’, # redis “OPTIONS”: {
“CLIENT_CLASS”: “t”,
“CONNECTION_POOL_KWARGS”: {
“max_connections”: 10000
}
#“PASSWORD”: “”,
},
},

}
CACHE_MIDDLEWARE_ALIAS = ‘default’
CACHE_MIDDLEWARE_SECONDS = 606060
CACHE_MIDDLEWARE_KEY_PREFIX = “cache_redis_demo_first_xxxxXfStyle”

3、使用django-extensions来清空缓存(这个开箱即用)
A、安装 pip install django-extensions

B、配置

INSTALLED_APPS = (

‘django_extensions’,

)
C、使用命令:
python manage.py clear_cache --cache defualt # 清理特定缓存
python manage.py clear_cache --all # 清空全部缓存

django-extensions命令扩展:

shell_plus: 加强版的Django shell,每次进入为你自动载入项目中所有的model,可以让你很方便的开始调试
admin_generator: 只要你提供app label,就会自动为你输出定义的Admin Class代码,默认输出在stdout
clean_pyc: 移除项目中所有的pyc文件
create_command: 为一个app生成自定义命令所需要的目录结构。
create_template_tags: 为一个app生成template tag所需要的目录结构。
clear_cache: 清除缓存,在测试和开发环境很有用
compile_pyc: 为项目编译python字节码
describe_form: 生产一个model的form代码,你可以将它拷贝到你的文件
delete_squashed_migrations: 删除残留的squash migration文件
dumpscript: 生产一个python 脚本,用来重新填充数据库
export_emails: 为你的用户生成email地址
graph_model: 创建基于model的GraphViz2文件.
mail_debug: 开启一个邮件服务器,它会打印邮件内容而不是把它发送出去
merge_model_instances: 合并重复的model instance
notes: 展示代码中所有的 TODO, FIXME, BUG, HACK, WARNING, NOTE, XXX 的地方
passwd: 轻松修改用户密码
pipchecker: 检查pip是否有过期的packages,类似于pip * list -o,只用于已安装的packages
print_settings: 展示所有的,或者指定的django settings
print_user_for_session: 通过session来找到user,并且打印
drop_test_database: 删除测试数据库
reset_db: 使用DROP DATABASE和CREATE DATABASE来重置数据库
runprofileserver: 开启一个激活了profile功能的开发服务器
runscript: 在django上下文中运行一个脚本
runserver_plus: 标准的runserver加上Werkzeug的debugger工具
set_fake_emails: 根据用户的数据,为所有用户设置一个虚构的email
show_template_tags: 展示当前项目可用的template tags和template filters
show_urls: 展示当前项目所有定义的urls
sqldiff: 展示model和数据库是否结构不一样,如果有不一样的地方就展示出来
sqlcreate: 根据你的settings.py定义,为你生成创建数据库的SQL代码
sqldsn: 根据settings.py定义的数据库配置,返回一个可以用于其它程序的数据库URI
sync_s3: 将MEDIA_ROOT的文件复制到S3
update_permissions: 重载权限
validate_templates: 确认template是否有语法错误

设置缓存

动态网站每一次请求都是动态的,服务器都会进行各种计算,但是对于一些更新频次不是太高的信息可以用缓存技术来节省服务开销。
每次用户请求页面时,Web 服务器都会进行各种计算——从数据库查询到模板呈现再到业务逻辑——以创建站点访问者看到的页面。

设置缓存
使用缓存需要设置一些东西,如缓存地方,缓存神魔?
第一步修改setting.py
CACHES = {
‘default’: {
‘BACKEND’: ‘django.core.cache.backends.memcached.PyMemcacheCache’, #基于内存的缓存
‘LOCATION’: ‘127.0.0.1:11211’,
}
}

设置缓存地址?

  1. 内存缓存

Memcached是Django 本地支持的最快、最有效的缓存类型,它 是一个完全基于内存的缓存服务器,最初开发用于处理 LiveJournal.com 的高负载,随后由 Danga Interactive 开源。Facebook 和维基百科等网站使用它来减少数据库访问并显着提高网站性能。
Memcached 作为守护进程运行,并被分配指定数量的 RAM。它所做的只是提供一个快速接口,用于在缓存中添加、检索和删除数据。所有数据都直接存储在内存中,因此没有数据库或文件系统使用的开销。

CACHES = {
‘default’: {
‘BACKEND’: ‘django.core.cache.backends.memcached.PyMemcacheCache’, #基于内存的缓存
‘LOCATION’: ‘127.0.0.1:11211’,
}
}

Memcached 的一项出色功能是能够在多个服务器上共享缓存。这意味着您可以在多台机器上运行 Memcached 守护进程,并且程序会将这组机器视为单个 缓存,而无需在每台机器上复制缓存值。要利用此功能,请将所有服务器地址包含在 中 LOCATION,以分号或逗号分隔的字符串或列表形式。
CACHES = {
‘default’: {
‘BACKEND’: ‘django.core.cache.backends.memcached.PyMemcacheCache’,
‘LOCATION’: [
‘172.19.26.240:11211’,
‘172.19.26.242:11211’,
]
}
}

  1. 数据库缓存¶

Django 可以将其缓存数据存储在您的数据库中。如果您有一个快速、索引良好的数据库服务器,这将最有效。
使用数据库表作为缓存后端:
• 设置BACKEND为 django.core.cache.backends.db.DatabaseCache
• 设置LOCATION为tablename,数据库表的名称。该名称可以是您想要的任何名称,只要它是尚未在您的数据库中使用的有效表名即可。

CACHES = {
‘default’: {
‘BACKEND’: ‘django.core.cache.backends.db.DatabaseCache’,
‘LOCATION’: ‘my_cache_table’,
}
}

这种方法在使用数据库缓存之前,您必须使用以下命令创建缓存表:
python manage.py createcachetable

  1. 文件系统缓存¶

CACHES = {
‘default’: {
‘BACKEND’: ‘django.core.cache.backends.filebased.FileBasedCache’,
‘LOCATION’: ‘/var/tmp/django_cache’,
}
}

  1. 本地内存缓存¶

CACHES = {
‘default’: {
‘BACKEND’: ‘django.core.cache.backends.locmem.LocMemCache’,
‘LOCATION’: ‘unique-snowflake’,
}
}

缓存参数¶
可以为每个缓存后端提供额外的参数来控制缓存行为。这些参数在设置中作为附加键提供 CACHES。有效参数如下:
• TIMEOUT:用于缓存的默认超时(以秒为单位)。此参数默认为300秒(5 分钟)。您可以设置TIMEOUT为None,默认情况下,缓存键永不过期。值0导致键立即过期(有效地“不缓存”)。
• OPTIONS:应该传递给缓存后端的任何选项。每个后端的有效选项列表都会有所不同,第三方库支持的缓存后端会将它们的选项直接传递给底层缓存库。
实现自己的剔除策略的缓存后端(即locmem,filesystem和database后端)将遵循以下选项:
• MAX_ENTRIES:删除旧值之前缓存中允许的最大条目数。此参数默认为300。
• CULL_FREQUENCY:MAX_ENTRIES达到时被剔除的条目的分数。实际比率为 ,因此设置为在达到时剔除一半的条目。这个参数应该是一个整数,默认为。1 / CULL_FREQUENCYCULL_FREQUENCY2MAX_ENTRIES3
0for的值CULL_FREQUENCY意味着当MAX_ENTRIES达到时将转储整个缓存。在一些后端(database尤其是)这使得扑杀多 以更高速缓存未命中的代价更快。
Memcached 后端将内容OPTIONS 作为关键字参数传递给客户端构造函数,允许对客户端行为进行更高级的控制。例如用法,见下文。
• KEY_PREFIX:将自动包含(默认情况下)到 Django 服务器使用的所有缓存键的字符串。
VERSION: Django 服务器生成的缓存键的默认版本号。
• KEY_FUNCTION 一个字符串,它包含一个函数的虚线路径,该函数定义了如何将前缀、版本和键组合成最终的缓存键。
在此示例中,文件系统后端配置的超时时间为 60 秒,最大容量为 1000 个项目:
CACHES = {
‘default’: {
‘BACKEND’: ‘django.core.cache.backends.filebased.FileBasedCache’,
‘LOCATION’: ‘/var/tmp/django_cache’,
‘TIMEOUT’: 60,
‘OPTIONS’: {
‘MAX_ENTRIES’: 1000
}
}
}
缓存神魔?

  1. 缓存整个站点

MIDDLEWARE = [
‘django.middleware.cache.UpdateCacheMiddleware’,
‘django.middleware.common.CommonMiddleware’,
‘django.middleware.cache.FetchFromCacheMiddleware’,
]

对具有不同查询参数的同一 URL 的请求的响应被认为是唯一的页面并单独缓存。这个中间件期望 HEAD 请求得到与相应 GET 请求相同的响应头;在这种情况下,它可以为 HEAD 请求返回缓存的 GET 响应。

“update”中间件必须在列表中的第一个,“fetch”中间件必须在最后。
然后,将以下必需的设置添加到您的 Django 设置文件中:
• CACHE_MIDDLEWARE_ALIAS – 用于存储的缓存别名。
• CACHE_MIDDLEWARE_SECONDS – 每个页面应该被缓存的秒数。
• CACHE_MIDDLEWARE_KEY_PREFIX– 如果缓存在使用相同 Django 安装的多个站点之间共享,请将其设置为站点名称,或此 Django 实例独有的其他一些字符串,以防止密钥冲突。如果您不在乎,请使用空字符串。

此外,UpdateCacheMiddleware自动在每个标题中设置一些HttpResponse影响下游缓存的标题:
• 将Expires标题设置为当前日期/时间加上定义的 CACHE_MIDDLEWARE_SECONDS.
• 设置Cache-Control标题以提供页面的最大年龄 - 同样,来自CACHE_MIDDLEWARE_SECONDS设置。

  1. • 缓存视图

django.views.decorators.cache定义了一个cache_page 装饰器,
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) #缓存时间
def my_view(request):

• cache_page还可以采用可选的关键字参数 ,cache它指示装饰器CACHES在缓存视图结果时使用特定的缓存 设置)。
• @cache_page(60 * 15, cache=“special_cache”)
def my_view(request):

  1. • 在 URL 缓存¶

from django.views.decorators.cache import cache_page
urlpatterns = [
path(‘foo/int:code/’, cache_page(60 * 15)(my_view)),
]

  1. 模板片段缓存

{% load cache %}
{% cache 500 sidebar %}
… sidebar …
{% endcache %}

  1. 也可自定义缓存对象

from django.core.cache import cache
cache.set(‘my_key’, ‘hello, world!’, 30)
cache.add(‘add_key’, ‘New value’)

cache.get(‘my_key’)

Django缓存清理和缓存设置相关推荐

  1. android 应用图标缓存清理,垃圾缓存清理大师

    垃圾缓存清理大师是一款非常不错的全能型垃圾清理软件,不管是应用缓存还是聊天产生的图片.语音.视频等等,app都能准确快速的扫码出来,然后一键轻松清除:为你的手机优化内存释放空间,用起来再也不卡了! 应 ...

  2. Android开发实战《手机安全卫士》——13.“缓存清理”模块实现

    文章目录 1.缓存清理--获取缓存过程 2.缓存清理--获取有缓存的应用 & 添加到线性布局 3.缓存清理--获取缓存界面进度条更新 4.缓存清理--清理缓存功能 5.缓存清理--单个应用缓存 ...

  3. 如何清理Tomcat缓存

    理tomcat缓存 清理服务器缓存可以消除某些未知的错误,如果你运行以前编译的项目有错,而没有及时将服务器缓存清理掉,错误依旧可能发生在新的项目中.所以,清理缓存是很有必要的. 1:关闭tomcat服 ...

  4. android之循环定时器实现,实现定Android时缓存清理

    目录 android之循环定时器实现 缓存清理 查看缓存大小CacheDataManager.getTotalCacheSize(getApplicationContext())); 启动缓存清理Ca ...

  5. 麦芒七怎么装鸿蒙,华为麦芒7怎么进行双清_清理缓存和恢复出厂设置的方法

    下面也是华为麦芒7手机的相关双清操作了,为什么要说这个双清操作呢,因为有的机友手机系统遇到了一些小问题,想通过这个双清来解决,可是一直找不到如何进行具体的双清,所以在这里详细的整理一下了,这个双清操作 ...

  6. 华为mate20保时捷鸿蒙系统,华为Mate20 RS保时捷版双清教程_清理缓存和恢复出厂设置方法...

    也在这里把这个华为Mate20 RS保时捷版手机的双清操作整理一下了,因为这个双清操作大家用到的也是比较多的,可是有的机友在找这个双清的操作方法的时候却找不到,其实这个双清操作也挺简单的,就是在手机上 ...

  7. uniapp 实现APP设置获取缓存清理缓存

    uniapp 实现APP设置获取缓存清理缓存 公司需要开发一款app 功能有在设置里显示缓存 以及清理缓存功能 实现方式 如下 页面效果如下 获取本机缓存 <view class="i ...

  8. buff/cache内存缓存过大,设置定时清理

    buff/cache内存缓存过大,设置定时清理 buff/cache居然占用内存达到10个G的内存 1.编写脚本 vim cleanCache.sh sudo sh -c "echo 1 & ...

  9. 高性能服务器架构(二):缓存清理策略

    原文链接:https://mp.weixin.qq.com/s/OopSWbLrzT-V11VDZOpxJw 虽然使用缓存思想似乎是一个很简单的事情,但是缓存机制却有一个核心的难点,就是--缓存清理. ...

最新文章

  1. 普通平键的主要尺寸有_快来收下这份家装尺寸表,衣柜不再鸡肋
  2. org manual翻译--3.5.8 更新表格
  3. django1.11.6+nginx1.12.2+uwsgi2.0.15 部署
  4. Yii设置响应数据的样式与内容
  5. 每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求
  6. 前端 ---jQuery的补充
  7. C#获取刚插入的数据的id
  8. 【资源】100页机器学习入门完整版,初学者必备!
  9. php 安装phalcon,安装phalcon
  10. 【Docker】OCI runtime exec failed: exec failed: container_linux.go:348: starting container process cau
  11. oracle删除universal,Oracle自带的Universal Installer卸载存在问题
  12. Sparse Modeling of Intrinsic Correspondences
  13. python token验证失败百分百解决_微信公众号token验证失败解决方案
  14. Linux E: 无法定位软件包
  15. 【Echarts】三维地图叠加柱状图
  16. Python生成requirement.txt文件
  17. 163邮箱怎么开通注册?公司邮箱格式选择,可以邮箱注册微信吗?
  18. Stochastic Weight Averaging
  19. WEB测试应该注意哪些地方,怎样才能做好WEB测试
  20. 创新点定义,如何写创新点

热门文章

  1. 大觉寺到鹫峰线路_串起回忆的行程—大觉寺-鹫峰公园-阳台山-凤凰岭公园穿越之旅...
  2. 量化交易策略 背离策略
  3. 隆重庆祝吃饭行情拉开帷幕!
  4. 1.3 正则表达式【匹配数字】
  5. 转载hiberinate的懒加载
  6. 使用HTML+CSS写一个网页 含图片和视频
  7. Rasa SDK中特殊Action类型:Knowledge Base Actions
  8. 揭秘SNS背后的社会学理论
  9. C - 征集慈善捐款
  10. 量化交易如何选择云服务器,如何在本地远程开发与调试云服务器程序