开发实践6_缓存^中间件

以下学习 朔宁夫 开发工程师 课程。

缓存可提高程序响应速度。数据库缓存(可过期)/ Redis缓存(Key:Value)/ Memcacheed缓存/ 程序层缓存。

一 缓存

1. 数据库缓存

创建缓存数据表 //

python manage.py createcachetable cache_table

setting //

# 缓存配置
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache', # 数据库缓存 声明此时django项目使用数据库缓存方式进行缓存'LOCATION': 'cache_table'  # 指定数据库缓存表的名称}
}

创建新的演示 app //

 python manage.py startapp cache_app

setting注册、项目链接总路由、app创建子路由。

path('cache/',include('cache_app.urls', namespace="cache")),

views //

import timefrom django.core.cache import caches
from django.http import HttpResponse
from django.shortcuts import renderdef db_show(request):#  实例化缓存对象db_cache = caches["default"]#  判断缓存师傅存在cache_data = db_cache.get("data_cache")  # 缓存的数据if cache_data:print("命中缓存")return HttpResponse(cache_data)print("没有命中,开始查找······")time.sleep(10)data = ['new algorithm', 'new application', 'combining models', 'data mining']response = render(request, "advance.html", {"data": data})#  设置缓存db_cache.set("data_cache", response.content, timeout=30)return response

sub route//

app_name = "cache"urlpatterns = [path('db/', db_show),
]

advance.html //

<ul>{% for i in data %}<li>{{ i }}</li>{% endfor %}
</ul>

2. Redis缓存

# 安装依赖 # pip install django-redis # pip install django-redis-cache

wget http://download.redis.io/releases/redis-5.0.3.tar.gz

or

Releases · tporadowski/redis · GitHub

Windows下安装Redis7.0.8_redis7.0.8解压版安装-CSDN博客

最终找资源安装了github上的7+需编译版。安装完成后

1) “服务” 启动 get readyxxx,redis 2项

2)管理员cmd cd /d D:\mysql\redis , redis-server.exe redis.conf , 

3)管理员cmd cd /d D:\mysql\redis , redis-cli.exe -h 127.0.0.1 -p 6379 , set a 1 ,  get a

4)django terminal  D:\mysql\redis> .\redis-cli.exe  , ping , select 15 , keys *。可见我的15号库是空的。

setting //

CACHES = {#  数据库缓存'default': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache',# 数据库缓存 声明此时django项目使用数据库缓存方式进行缓存'LOCATION': 'cache_table'# 指定数据库缓存表的名称},#  Redis 缓存 (Redis有[0,15]个库select k, 默认0对应6379)#  安装依赖#  pip install django-redis#  pip install django-redis-cache'redis_cache': {'BACKEND': 'django_redis.cache.RedisCache','LOCATION': 'redis://127.0.0.1:6379/2',  # 设置为本机 2号库'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}
}

views //

def redis_show(request):#  实例化缓存对象redis_cache = caches["redis_cache"]#  判断缓存师傅存在cache_data = redis_cache.get("data_cache")  # 缓存的数据if cache_data:print("命中缓存")return HttpResponse(cache_data)print("没有命中,开始查找······")time.sleep(10)data = ['new algorithm', 'new application', 'combining models', 'data mining']response = render(request, "advance.html", {"data": data})#  设置缓存redis_cache.set("data_cache", response.content, timeout=30)return response

访问页面,未过期时终端可见2号库中数据

3. memcached缓存

#  memcached
#  一个单独的服务系统,有自己的端口号
#  pip install python-memcached
'mem_cached': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCach',  # 指定缓存使用的引擎'LOCATION': '127.0.0.1:11211'
}

4. 程序层缓存

django中使用最多的一种方式

① 用装饰器

views //

@cache_page(30)  #  先看有没有缓存,再绝对是否调用函数
def show(request):print('无系统缓存,执行对本函数的调用')data = ['new algorithm', 'new application', 'combining models', 'data mining']return render(request, "advance.html", {"data": data})

②放到urls中使用

url //

path('pro_url/', cache_page(30)(url_show))

views //

def url_show(request):print('无系统缓存,执行对本函数的调用')data = ['new algorithm', 'new application', 'combining models', 'data mining']return render(request, "advance.html", {"data": data})

二 中间件

本质上是一个类。AOP思想。aspect oriented programming, 面向切面编程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/626000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十部分 make 的运行

目录 一、make 的退出码 二、指定 Makefile 三、指定目标 “all” “clean” “install” “print” “dist” “TAGS” “check”和“test” 四、检查规则 五、make 的参数 一般来说&#xff0c;最简单的就是直接在命令行下输入 make 命令&#xff0c;make 命令会…

代码随想录算法训练营第20天(二叉树6 | 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

二叉树 part06 654.最大二叉树解题思路 617.合并二叉树解题思路 700.二叉搜索树中的搜索解题思路 98.验证二叉搜索树解题思路误区 654.最大二叉树 又是构造二叉树&#xff0c;昨天大家刚刚做完 中序后序确定二叉树&#xff0c;今天做这个 应该会容易一些&#xff0c; 先看视频&…

12.云原生之kubesphere中应用部署方式

云原生专栏大纲 文章目录 k8s中应用部署Kubernetes常用命令 kubesphere中可视化部署应用创建工作负载服务暴露 helm部署应用helm命令行部署应用kubesphere中使用应用仓库 k8s中应用部署 在k8s中要想部署应用&#xff0c;需要编写各种yaml文件&#xff0c;一旦应用依赖比较复杂…

不同整数的最少数目和单词直接最短距离

写是为了更好的思考&#xff0c;坚持写作&#xff0c;力争更好的思考。 今天分享两个关于“最小、最短”的算法题&#xff0c;废话少说&#xff0c;show me your code&#xff01; 一、不同整数的最少数目 给你一个整数数组arr和一个整数k。现需要从数组中恰好移除k个元素&…

蓝桥杯备赛 | 洛谷做题打卡day2

​ 蓝桥杯备赛 | 洛谷做题打卡day2 嵌套循环yyds&#xff01;&#xff01; 题目来源&#xff1a;洛谷P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n n n 行 m m m 列的雷区中有一些格子含有地雷&am…

如何去开发直播电商系统小程序

明确你的直播电商系统的功能和特性&#xff0c;包括用户注册、商品展示、购物车、支付结算、直播功能、评论互动等。根据需求确定系统的基本架构和主要模块。 技术选型&#xff1a;选择适合你的直播电商系统的技术栈。考虑前端框架&#xff08;如React、Vue.js&#xff09;、后…

ardupilot开发 --- 固件定制(OEM) 篇

0. 前言 固件功能定制OEM Customization&#xff1a; 原厂设备制造商OEM&#xff08;Original Equipment Manufacturer&#xff09;、代工功能勾选参数预设固件名称自定义 1. 基于某个飞控硬件来定制自己的飞控产品 可以自定义的包括&#xff1a;固件名称、预设参数、lua脚本…

C语言:编译和链接

目录 一&#xff1a;翻译环境和运行环境 二&#xff1a;翻译环境 2.1预处理&#xff08;预编译&#xff09; 2.2编译 2.2.1 词法分析&#xff1a; 2.2.2语法分析 2.2.3语义分析 2.3 汇编 三&#xff1a;运行环境 一&#xff1a;翻译环境和运行环境 在ANSI C的任何一种…

【go语言】读取toml文件

一、简介 TOML&#xff0c;全称为Toms Obvious, Minimal Language&#xff0c;是一种易读的配置文件格式&#xff0c;旨在成为一个极简的数据序列化语言。TOML的设计原则之一是保持简洁性&#xff0c;易读性&#xff0c;同时提供足够的灵活性以满足各种应用场景。 TOML文件由…

力扣每日一练(24-1-16)

我一开始想到的是&#xff0c;如果数字相同则加一。 然而&#xff0c;对了一点点&#xff0c;而已。 高手的方法不是普通人在几分钟内能想得出来的&#xff0c;hh 继续补充&#xff1a; 如果数字不同则减一&#xff0c;如果计数到达了0&#xff0c;则更新数字&#xff0c;最…

论文复现|tightly focused circularly polarized ring Airy beam

请尊重原创的劳动成果 如需要转载&#xff0c;请后台联系 前言 采用MATLAB复现一篇论文里面的插图&#xff0c;涡旋光束的聚焦的仿真方式有很多种&#xff0c;这里采用MATLAB进行仿真&#xff0c;当然也有其他的很多方式&#xff0c;不同的方式各有千秋。 论文摘要 本文证明…

Kafka消费流程

Kafka消费流程 消息是如何被消费者消费掉的。其中最核心的有以下内容。 1、多线程安全问题 2、群组协调 3、分区再均衡 1.多线程安全问题 当多个线程访问某个类时&#xff0c;这个类始终都能表现出正确的行为&#xff0c;那么就称这个类是线程安全的。 对于线程安全&…

uni-app的学习【第三节】

五 运行环境判断与跨端兼容 uniapp为开发者提供了一系列基础组件,类似HTML里的基础标签元素,但uni-app的组件与HTML不同,而是与小程序相同,更适合手机端使用。 虽然不推荐使用 HTML 标签,但实际上如果开发者写了`div`等标签,在编译到非H5平台时也会被编译器转换为 `view`…

@RequiresApi(api = Build.VERSION_CODES.O)

问题 RequiresApi(api Build.VERSION_CODES.O) 详细问题 对于代码 // 格式化日期为MySQL的DATE类型格式private String formatDate(LocalDate date) {DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-MM-dd");return date.format(formatter);}o…

C# 面向切面编程之AspectCore初探

写在前面 AspectCore 是Lemon名下的一个国产Aop框架&#xff0c;提供了一个全新的轻量级和模块化的Aop解决方案。面向切面也可以叫做代码拦截&#xff0c;分为静态和动态两种模式&#xff0c;AspectCore 可以实现动态代理&#xff0c;支持程序运行时在内存中“临时”生成 AOP 动…

解决git : 无法将“git”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确

首先&#xff0c;确保你已经正确安装了git&#xff0c;并且git的安装路径已经添加到系统的环境变量中。你可以在命令行中输入“git --version”来检查git是否已经正确安装和配置。 如果git已经正确安装并且路径已经添加到系统的环境变量中&#xff0c;但仍然出现这个问题&…

深入云原生—基于KubeWharf深度剖析-以公司实际应用场景为例深度解读

各位好&#xff0c;这里是难忘&#xff0c;本人对云原生也是研究了2年多了&#xff0c;算是略有所得&#xff0c;本次就来深入云原生—基于KubeWharf深度剖析场景与解读。我们需要先了解一下 KubeWharf&#xff0c;可能很多人都感觉到有点陌生吧&#xff0c;下面我们来一起学习…

助力工业焊缝质量检测,YOLOv7【tiny/l/x】不同系列参数模型开发构建工业焊接场景下钢材管道焊缝质量检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景&#xff0c;在我们前面的博文开发实践中也有一些相关的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a;《轻量级模型YOLOv5-Lite基于自己的数据集【焊接质量检测】从零构建模型超详细教程》 《基于DeepLabV3Plus…

【Python】torch中的.detach()函数详解和示例

在PyTorch中&#xff0c;.detach()是一个用于张量的方法&#xff0c;主要用于创建该张量的一个“离断”版本。这个方法在很多情况下都非常有用&#xff0c;例如在缓存释放、模型评估和简化计算图等场景中。 .detach()方法用于从计算图中分离一个张量&#xff0c;这意味着它创建…

pip和conda添加和删除镜像源

conda不小心安装了一个同名的环境&#xff0c;不小心就把原来搞了两天的旧环境覆盖了&#xff0c;气死了&#xff0c;这里记录一下再来一遍的过程 conda create --name nerfstudio -y python3.8 python -m ensurepip --default-pip conda remove --name env_name --all D:\mini…