缓存

标签: 缓存

架构

CS架构(client/server):客户端/服务器

BS架构(brower/server):浏览器/服务器

区别:

  • 客户端负载
    • CS负载大
      • 更新维护,收集用户信息,和用户交互,发送请求
    • BS负载小,只负责展示,将逻辑处理的过程交给了服务器
  • 维护成本(版本迭代,bug修改,运维相关)
    • CS大
      • 需要下载更新包
    • BS小
      • 只需要修改服务器
  • 安全性
    • CS高
      • 需要下载客户端
    • BS低
      • 用户量群体较大,不稳定

手机app

  • 原生:安卓写的
  • html:安卓->浏览器->html页面

数据库优化

  • sql语句
      • 少使用*
      • 使用join代替子查询(where from–需要别名)
      • 索引字段靠左原则
      • where,group by,having
  • 表结构优化
    • 字段
      • 字段类型的选择
    • 主键外键
      • 分表
    • 三范式
  • 库结构优化
    • 分库
      • 水平
      • 垂直
  • 水平分表
    • 主键全局唯一
  • 水平分库分表
    • 事务的处理,关联查询
  • 数据库架构优化

性能不高->IO操作

mysql数据存储在硬盘

硬盘->加载->内存->读

缓存

缓存是一类快速读取数据的介质。常用的缓存介质是读取数据快的内存。

一般来说,从数据库中多次将需要的数据取出,要比从内存中或者硬盘中一次性将数据取出来成本高。

对于大中型网站而言,使用缓存减少了数数据库的访问次数,从而提高了网站的性能。

缓存:缓存就是将数据提前放在一个地方(内存),访问时,直接从缓存中返回数据,不需要再次查询数据库。

缓存逻辑

判断想要的数据是否在缓存当中

    • 直接返回数据
    • 查询数据库,保存在缓存中,返回数据

缓存常用的方式

Memcache缓存:是分布式的高速缓存技术,是当下最火的,使用最多的。

(一)安装

1.本地安装

在这里插入图片描述

查看并启动服务
在这里插入图片描述

2.安装

pip install python-memcached

(二)在django项目中使用缓存

配置settings.py

找到全局settings.py文件

在这里插入图片描述

粘贴过来并修改

在这里插入图片描述

使用

1.在视图中使用

在这里插入图片描述
在这里插入图片描述

2.在路由中使用缓存

在这里插入图片描述
在这里插入图片描述

3.在中间件中使用

作用范围:全局
在这里插入图片描述

4.页面缓存

被cache标签包起来的部分会被缓存下来
在这里插入图片描述

5.视图内部数据的缓存

视图

from django.core.cache import cache
def cache_test(request):
    # 从缓存中提取数据
    # 根据order_number获取order_total
    order_number = request.GET.get('order_number')
    data = cache.get(order_number)
    # 如果没有,数据查询,增加到缓存中
    print('-----------------------')
    if not data:
        print('++++++++++++++++++++++')
        payorder = PayOrder.objects.filter(order_number=order_number).first()
        # 将数据写入cache
        cache.set(order_number,payorder.order_total,60)
        data = payorder.order_total
    return HttpResponse('order_total:%s'%data)

路由
在这里插入图片描述
在这里插入图片描述

两次执行,控制台返回的效果不同
在这里插入图片描述

说明第一次调用时缓存中没有该数据,就进入了判断,进行了数据库查询后,将数据存入缓存中。

第二次调用时,缓存中有该数据,没有进入判断,直接从缓存中取出了。

版权声明:本文为qq_34244910原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34244910/article/details/102556881

智能推荐

mybatis+ehcache二级缓存

导入jar包 mapper.xml文件开启二级缓存 pojo类实现序列化接口 配置ehcache.xml 测试...

python+opencv实现图像拼接

任务 拍摄两张图片去除相同部分,拼接在一起 原图 结果 步骤 读取两张图片 使用sift检测关键点及描述因子 匹配关键点 处理并保存关键点 得到变换矩阵 图像变换并拼接 代码实现 扩展 这里对右边图像进行变换,右边变得模糊,可以修改代码对左边图像变换 这里只有两张图片拼接,可以封装实现多张图片拼接 可以修改代码实现上下图片的拼接...

python_sklearn机器学习算法系列之AdaBoost------人脸识别(PCA,决策树)

          注:在读本文之前建议读一下之前的一片文章python_sklearn机器学习算法系列之PCA(主成分分析)------人脸识别(k-NearestNeighbor,KNN)         本文主要目的是通过一个简单的小...

memmove函数与memcpy函数的模拟实现

memmove函数和memcpy函数都是在内存复制任意类型的,但是它俩也有区别。当源区域和目标区域有重复的,memmove函数会复制缓冲区重叠的部分,而memcpy相反,会报出未知错误。 下面给出两个函数的实现 首先,memmove函数。 实现的基本原理如下图。 具体代码如下: memcpy函数的实现很简单,就直接给出源代码了...

猜你喜欢

SpringFramework核心 - IOC容器的实现 - 总结

1. 概述 把Spring技术内幕第一章和第二章过了一遍,也做了一些笔记, 对IOC容器的实现有了一定皮毛理解,现在跟着源码再过一遍总结一下IOC容器的初始化,Bean的初始化的过程,做一下总结 ① IOC容器和简单工厂模式 在开始之前,先想想我们平时是怎么使用IOC容器为我们管理Bean的,假设我们要把下面的User类交给IOC容器管理 我们不想关心如何创建一个User对象实例的,仅仅在需要他的...

Python和Django的安装

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈  一、下载并安装Python Python 官方下载地址:http://www.python.org/ftp/python/ 我们这里选择的是 Python 2.7.2 。虽然目前最新版是Python 3.2.2, 但是Django目前还不支持 Python 3.2.2。 安装步骤很简单,双击安装包开...

OpenStack代码贡献初体验

为什么80%的码农都做不了架构师?>>>     OpenStack如今已成为开源云平台中的明星项目,得到广泛关注。OpenStack的优秀出众依赖于众多开发者的努力,在享受其带来的便利与快捷的同时,为其做一份贡献也是一个开发者的义务。  在前段时间的OpenStack的测试过程中,我发现Nova项目中的一个Bug,于是向社区提交了Bug报...

SQL Server之8:sql查询每个学生得分最高的两门课

这是一道面试题,今天有空把它记下来,以后遇到此类问题作个参考!刚一看到这个题目,估计好多人都会想到关键字top,其实这里用到的关键字是partition, 好了,先看看表结构,及数据吧!     接下来看一看partition的功能,执行语句   结果如下:   到这里一目了然知道最终结果了!   View Code     &...

vue-video-player 浏览器缩放

文章目录 前言 一、vue-video-player的封装 二、调用 1. 引入 2. vue template代码 2. 主要js代码 效果 前言 此篇是在上一次《[Vue 播放rtmp直播流]》基础之上的更新及补充;近期接到客户需求,需要在视频流上显示额外的信息;当然,视频流上叠加信息可以通过canvas来完成(透明canvas实现),但是在测试的过程中发现,当浏览器缩放时,叠加的图层信息与初...