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

这篇具有很好参考价值的文章主要介绍了开发实践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 time

from django.core.cache import caches
from django.http import HttpResponse
from django.shortcuts import render


def 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号库中数据

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

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})

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

②放到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, 面向切面编程。AOP&OOP。实现:注册+添加方法。

需要复写的方法(自定义的middleware类中添加相关执行时机的方法):1)process_request(self,request)请求预处理方法;2)process(self, request, view, args, kwargs) View预处理方法;3)process_response(self, request, response)Response后处理方法;4)process_exception(self, request, exception) Exception后处理方法。

演示:

项目层new python package my_middleware

package下new my_middleware.py //

from urllib import response

from django.utils.deprecation import MiddlewareMixin


class MyFirstMiddleWare(MiddlewareMixin):
    def process_request(self, request):
        print("1--process_request")

    def process_view(self, request, view, args, kwargs):
        print("2--process_view")

    def process_response(self, request, response):
        print("3--precess_response")
        return response

class MySecondMiddleWare(MiddlewareMixin):
    def process_request(self, request):
        print("21--process_request")

    def process_view(self, request, view, args, kwargs):
        print("22--process_view")

    def process_response(self, request, response):
        print("23--precess_response")
        return response

注册 setting  注意列表元素有序,遍历先后问题//

MIDDLEWARE = [xxx,

'my_middleware.my_middleware.MyFirstMiddleWare',

'my_middleware.my_middleware.MySecondMiddleWare',]

访问某个页面 //

# 从前往后遍历中间件,但response从后往前

开发实践6_缓存^中间件,缓存文章来源地址https://www.toymoban.com/news/detail-804606.html

到了这里,关于开发实践6_缓存^中间件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务中间件-分布式缓存Redis

    – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题: 1.数据丢失问题: Redis是内存存储,服务重启可能会丢失数据 2.并发能力问题: 单节点Redis并发能力虽然不错,但也无法满足如618这样的高并发场景 3.故障恢复问题: 如果Redis宕机,则服务不可用,需要一种自动

    2024年02月12日
    浏览(68)
  • 【缓存中间件】Redis哈希槽的概念

    分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。。 需要重点关注的是数据分区规则。常见的分区规则有哈希分区和顺序分区两种,哈希分区离散度好、数据分布业务无关、无法顺

    2024年02月13日
    浏览(44)
  • Linux环境下搭建使用缓存中间件Redis

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! redis简介 Redis是一个开源的、基于内存的、高性能的键值对存储数据库。 Redis支持多种数据

    2024年02月11日
    浏览(49)
  • saas产品私有化(一) 缓存中间件适配

            名词解释:私有化一般指的是在对客交付过程中,客户由于自身数据敏感,成本控制等原因要求交付乙方将售卖的服务利用现有甲方的硬件设备或者云服务进行服务的部署.     面向场景:一般特制的是saas化的云服务软件提供商的对特殊客群的场景.其中saas行业中比较起步

    2024年02月08日
    浏览(46)
  • 中间件系列 - Redis入门到实战(高级篇-多级缓存)

    学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习目标 JVM进程缓存 Lua语法入门 实现多级缓存 缓存同步策略 传统的缓存策略

    2024年02月03日
    浏览(59)
  • 中间件系列 - Redis入门到实战(高级篇-分布式缓存)

    学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习目标 Redis持久化 Redis主从 Redis哨兵 Redis分片集群 - 基于Redis集群解决单机R

    2024年02月03日
    浏览(53)
  • 第5章 分布式缓存中间件的配置及其调用定义

    1 分布式缓存中间件的配置定义 1.1 Core.Configuration. CacheConfig namespace Core . Configuration {     /// summary     /// 【缓存配置 -- 类】     /// remarks     /// 摘要:     ///     通过该类中的属性成员实例对 “appsettings.json” 文件中的 1 个指定缓存项 ( 键 / 值对 ) 在内存或指定分布式软

    2024年02月03日
    浏览(59)
  • 【云原生进阶之PaaS中间件】第一章Redis-2.4缓存更新机制

            无论先操作db还是cache,都会有各自的问题,根本原因是cache和db的更新不是一个原子操作,因此总会有不一致的问题。想要彻底解决这种问题必须将cache和db的更新操作归在一个事务之下(例如使用一些分布式事务,或者强一致性的分布式协议)。或者采用串行化,

    2024年02月10日
    浏览(69)
  • 【开发】中间件——ElasticSearch

    ElasticSearch是一个基于Lucene的搜索服务器。提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口 ElasticSearch是一个基于Lucene的搜索服务器。提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口 ElasticSearch是用JAVA开发的。达到实时搜索,稳定可靠,快速,

    2024年02月17日
    浏览(53)
  • Linux中间件开发

    Linux中间件开发通常是指开发运行在Linux操作系统上的中间件软件,这些软件通常用于连接不同的应用程序或平台,提供服务的支持和协调。常见的Linux中间件包括Web服务器、应用服务器、消息队列、数据库中间件等。 中间件开发的主要任务是实现中间件的核心功能,例如We

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包