猪八戒网做网站,WordPress开启自带redis,代理网址是什么,宣传视频制作缓存 简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中#xff0c;当用户再次请求时#xff0c;直接去缓存中拿#xff0c;避免对数据库的频繁操作#xff0c;加快数据的显示时间#xff0c;需要知道的是#xff0c;缓存里面的数据一般都设置有超时…缓存 简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中当用户再次请求时直接去缓存中拿避免对数据库的频繁操作加快数据的显示时间需要知道的是缓存里面的数据一般都设置有超时时间缓存一般用在数据变化不大实时率不高的情况下。 由于Django是动态网站所有每次请求均会去数据进行相应的操作当程序访问量大时耗时必然会更加明显最简单解决方式是使用缓存缓存将一个某个views的返回值保存至内存或者memcache中5分钟内(默认配置)再有人来访问时则不再去执行view中的操作而是直接从内存或者Redis中之前缓存的内容拿到并返回。 Django中提供了6种缓存方式 开发调试内存文件数据库Memcache缓存python-memcached模块Memcache缓存pylibmc模块 配置 a、开发调试 # 此为开始调试用实际内部不做任何操作# 配置CACHES {default: {BACKEND: django.core.cache.backends.dummy.DummyCache, # 引擎TIMEOUT: 300, # 缓存超时时间默认300None表示永不过期0表示立即过期OPTIONS:{MAX_ENTRIES: 300, # 最大缓存个数默认300CULL_FREQUENCY: 3, # 缓存到达最大个数之后剔除缓存个数的比例即1/CULL_FREQUENCY默认3},KEY_PREFIX: , # 缓存key的前缀默认空VERSION: 1, # 缓存key的版本默认1KEY_FUNCTION 函数名 # 生成key的函数默认函数会生成为【前缀:版本:key】}}# 自定义keydef default_key_func(key, key_prefix, version):Default function to generate keys.Constructs the key used by all other methods. By default it prependsthe key_prefix. KEY_FUNCTION can be used to specify an alternatefunction with custom key making behavior.return %s:%s:%s % (key_prefix, version, key)def get_key_func(key_func):Function to decide which key function to use.Defaults to default_key_func.if key_func is not None:if callable(key_func):return key_funcelse:return import_string(key_func)return default_key_func View Code b、内存 # 此缓存将内容保存至内存的变量中# 配置CACHES {default: {BACKEND: django.core.cache.backends.locmem.LocMemCache,LOCATION: unique-snowflake,}}# 注其他配置同开发调试版本就是将开发调试版本里面的这几句换成上面这个即可 View Code c、文件(网站比较小还没钱可以用文件的形式) # 此缓存将内容保存至文件# 配置CACHES {default: {BACKEND: django.core.cache.backends.filebased.FileBasedCache,LOCATION: /var/tmp/django_cache,}}# 注其他配置同开发调试版本 View Code d、数据库 # 此缓存将内容保存至数据库# 配置CACHES {default: {BACKEND: django.core.cache.backends.db.DatabaseCache,LOCATION: my_cache_table, # 数据库表}}# 注执行创建表命令 python manage.py createcachetable View Code e、Memcache缓存python-memcached模块 # 此缓存使用python-memcached模块连接memcacheCACHES {default: {BACKEND: django.core.cache.backends.memcached.MemcachedCache,LOCATION: 127.0.0.1:11211,}}CACHES {default: {BACKEND: django.core.cache.backends.memcached.MemcachedCache,LOCATION: unix:/tmp/memcached.sock,}} CACHES {default: {BACKEND: django.core.cache.backends.memcached.MemcachedCache,LOCATION: [172.19.26.240:11211,172.19.26.242:11211,]}} View Code f、Memcache缓存pylibmc模块 # 此缓存使用pylibmc模块连接memcacheCACHES {default: {BACKEND: django.core.cache.backends.memcached.PyLibMCCache,LOCATION: 127.0.0.1:11211,}}CACHES {default: {BACKEND: django.core.cache.backends.memcached.PyLibMCCache,LOCATION: /tmp/memcached.sock,}} CACHES {default: {BACKEND: django.core.cache.backends.memcached.PyLibMCCache,LOCATION: [172.19.26.240:11211,172.19.26.242:11211,]}} View Code g. Redis缓存依赖pip3 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}# PASSWORD: 密码,}}
} View Code from django_redis import get_redis_connection
conn get_redis_connection(default) 视图中链接并操作 应用 a. 全站使用(利用Django中间件) 使用中间件经过一系列的认证等操作如果内容在缓存中存在则使用FetchFromCacheMiddleware获取内容并返回给用户当返回给用户之前判断缓存中是否已经存在如果不存在则UpdateCacheMiddleware会将缓存保存至缓存从而实现全站缓存MIDDLEWARE [django.middleware.cache.UpdateCacheMiddleware,# 其他中间件...django.middleware.cache.FetchFromCacheMiddleware,]CACHE_MIDDLEWARE_ALIAS CACHE_MIDDLEWARE_SECONDS CACHE_MIDDLEWARE_KEY_PREFIX View Code b. 单独视图缓存 方式一from django.views.decorators.cache import cache_pagecache_page(60 * 15)def my_view(request):...方式二from django.views.decorators.cache import cache_pageurlpatterns [url(r^foo/([0-9]{1,2})/$, cache_page(60 * 15)(my_view)),] View Code c、局部视图(html页面)使用 a. 引入TemplateTag{% load cache %}b. 使用缓存{% cache 5000 缓存key %}缓存内容{% endcache %} View Code 信号 抛砖引玉 1.如何对数据库的增加操作记录日志 2.信号比中间件的区别 Django中提供了“信号调度”用于在框架执行操作时解耦。通俗来讲就是一些动作发生的时候信号允许特定的发送者去提醒一些接受者。 Django内置信号 Model signals pre_init # django的modal执行其构造方法前自动触发 post_init # django的modal执行其构造方法后自动触发 pre_save # django的modal对象保存前自动触发 post_save # django的modal对象保存后自动触发 pre_delete # django的modal对象删除前自动触发 post_delete # django的modal对象删除后自动触发 m2m_changed # django的modal中使用m2m字段操作第三张表add,remove,clear前后自动触发 class_prepared # 程序启动时检测已注册的app中modal类对于每一个类自动触发 Management signals pre_migrate # 执行migrate命令前自动触发 post_migrate # 执行migrate命令后自动触发 Request/response signals request_started # 请求到来前自动触发 request_finished # 请求结束后自动触发 got_request_exception # 请求异常后自动触发 Test signals setting_changed # 使用test测试修改配置文件时自动触发 template_rendered # 使用test测试渲染模板时自动触发 Database Wrappers connection_created # 创建数据库连接时自动触发 对于Django内置的信号仅需在Django必定能执行的地方注册指定信号当程序执行相应操作时自动触发注册函数 from django.core.signals import request_finishedfrom django.core.signals import request_startedfrom django.core.signals import got_request_exceptionfrom django.db.models.signals import class_preparedfrom django.db.models.signals import pre_init, post_initfrom django.db.models.signals import pre_save, post_savefrom django.db.models.signals import pre_delete, post_deletefrom django.db.models.signals import m2m_changedfrom django.db.models.signals import pre_migrate, post_migratefrom django.test.signals import setting_changedfrom django.test.signals import template_renderedfrom django.db.backends.signals import connection_createddef callback(sender, **kwargs):print(xxoo_callback)print(sender,kwargs)xxoo.connect(callback)# xxoo指上述导入的模块名 View Code from django.core.signals import request_finished
from django.dispatch import receiverreceiver(request_finished)
def my_callback(sender, **kwargs):print(Request finished!) View Code 自定义信号 转载于:https://www.cnblogs.com/Dominic-Ji/p/9279742.html