首页 > 其他分享 >缓存

缓存

时间:2024-09-20 16:23:51浏览次数:1  
标签:index 缓存 cache django import now

Django4中的缓存

详细文档参考:https://www.cnblogs.com/Neeo/articles/17589834.html

Django支持的缓存有好几种:

  • 三方的Redis(推荐),Memcached(不推荐)
  • 缓存到本地文件
  • 缓存到本地数据库
  • 缓存到内存里
  • 虚拟缓存

image-20230730174240977

缓存的粒度

局部视图缓存

缓存指定的视图函数,有两种写法.

  1. 在视图中以装饰器的形式

views.py

import datetime
from django.shortcuts import render, HttpResponse

# 必须导入缓存装饰器
from django.views.decorators.cache import cache_page


@cache_page(5)  # 缓存单位:秒
def index(request):
    # print(1111)
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render(request, 'index.html', {"now": now})

urls.py:

from django.contrib import admin
from django.urls import path
from api import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
]
  1. 在路由中实现

views.py

import datetime
from django.shortcuts import render, HttpResponse


def index(request):
    # print(1111)
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render(request, 'index.html', {"now": now})

urls.py

from django.contrib import admin
from django.urls import path
from api import views

from django.views.decorators.cache import cache_page
urlpatterns = [
    path('admin/', admin.site.urls),
    # path('index/', views.index),
    path('index/', cache_page(5)(views.index)),  # 缓存,路由中指定缓存的视图函数
]

模板缓存,粒度更新,相当于对于页面的局部进行缓存

views.py中正常写代码:

import datetime
from django.shortcuts import render, HttpResponse
# 必须导入缓存装饰器
# from django.views.decorators.cache import cache_page
#
#
# @cache_page(5)  # 缓存单位:秒
def index(request):
    # print(1111)
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render(request, 'index.html', {"now": now})

urls.py正常写代码:

from django.contrib import admin
from django.urls import path
from api import views

# from django.views.decorators.cache import cache_page
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    # path('index/', cache_page(5)(views.index)),  # 缓存,路由中指定缓存的视图函数
]

index.html这里就需要注意了。

  1. 必须load cache
  2. 必须用缓存的模板把要缓存的内容包起来,才能被缓存上,其它没包裹的标签,不缓存。
{% load cache %} <!-- 必须声明 -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>没有缓存的</h3>
<p>{{ now }}</p>

<h3>有缓存的</h3>
<!-- cache 后面的5,表示缓存的时间,5后面的字符串来自于settings.py中的缓存配置中的LOCATION的值'unique-snowflake'-->
<!-- 用缓存的模板把要缓存的内容包起来-->
{% cache 5 'unique-snowflake' %}
    <p>{{ now }}</p>
    <p>{{ now }}</p>
{% endcache %}
</body>
</html>

全栈缓存

就是整个项目进行缓存,粒度是最大的。

首先要配置settings.py

MIDDLEWARE = [
    # 下面这个缓存中间件必须放在所有中间件的最上面
    "django.middleware.cache.UpdateCacheMiddleware",

    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    # 下面这个缓存中间件必须放在所有中间件的最下面
    "django.middleware.cache.FetchFromCacheMiddleware",
]



# 我这里将cache缓存由本地内存缓存更换为了Redis
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://:@127.0.0.1:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "1234",  # 密码,如果没有设置密码,这个参数可以注视掉
            # 'MAX_ENTRIES': 300,  # 最大缓存个数(默认300)
            # 'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}


# 默认超时时间是300秒,我们可以通过CACHE_MIDDLEWARE_SECONDS来修改
CACHE_MIDDLEWARE_SECONDS = 20
# 下面是关于key的,咱们这里保持默认就完了
CACHE_MIDDLEWARE_KEY_PREFIX = ""
# 用于存储的缓存别名,没想好的,指定个default就行
CACHE_MIDDLEWARE_ALIAS = "default"

views.py正常写代码:

import datetime
from django.shortcuts import render, HttpResponse
# 必须导入缓存装饰器
# from django.views.decorators.cache import cache_page
#
#
# @cache_page(5)  # 缓存单位:秒
def index(request):
    # print(1111)
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render(request, 'index.html', {"now": now})

urls.py正常写代码:

from django.contrib import admin
from django.urls import path
from api import views

# from django.views.decorators.cache import cache_page
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    # path('index/', cache_page(5)(views.index)),  # 缓存,路由中指定缓存的视图函数
]

index.html也正常写代码:

{% load cache %} <!-- 必须声明 -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>没有缓存的</h3>
<p>{{ now }}</p>

<h3>有缓存的</h3>
{% cache 5 'unique-snowflake' %}
    <p>{{ now }}</p>
    <p>{{ now }}</p>
{% endcache %}


</body>
</html>

注意,如果同时使用了全栈缓存和局部模板片段缓存,那么全栈缓存的优先级高。

Redis

数据库排行榜:https://db-engines.com/en/ranking

redis是一个独立的非关系型数据。

官方建议,将Redis安装到Linux系统,所以,你在redis官网,压根看不到redis关于Windows的安装包。

redis3 for Windows

参考:https://www.cnblogs.com/Neeo/articles/12673194.html#windows

和讲解视频

redis3 for centos

参考:https://www.cnblogs.com/Neeo/articles/12673194.html#redis307-for-centos79

和讲解视频

注意,必须关闭你的centos系统的防火墙:

# 查看防火墙状态
systemctl status firewalld.service
# 关闭防火墙
systemctl stop firewalld.service
# 禁止开机启动防火墙
systemctl disable firewalld.service
# 启动防火墙
systemctl start firewalld.service
# 防火墙随系统开启启动
systemctl enable firewalld.service

# 关闭selinux
[root@r ~]# sed -i.ori 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

关于Redis使用和python如何操作

参考我的博客:https://www.cnblogs.com/Neeo/p/10864123.html#database

image-20230730190025435

关于Django如何操作Redis?参考:https://www.cnblogs.com/Neeo/articles/14269422.html

标签:index,缓存,cache,django,import,now
From: https://www.cnblogs.com/sherwin1995/p/18422735

相关文章

  • 如何通过调整RecyclerView的缓存来优化滚动性能
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在RecyclerView中,setMaxRecycledViews方法用于设置RecycledViewPool的缓存大小,这是一个重要的性能优化手段。RecycledViewPool允许多个RecyclerView实例共......
  • 2025秋招LLM大模型多模态面试题(六)-KV缓存
    目录为什么Transformer推理需要KV缓存?KV缓存的具体实现没有缓存的情况下使用缓存的情况下KV缓存在解码中的阶段划分Prefil阶段Decoding阶段KV缓存的存储类型及显存占用计算KV缓存的局限与优化策略超长文本与复杂模型场景下的瓶颈量化方案的应用量化方......
  • 146. LRU 缓存
     \classLRUCache{public:LRUCache(intcapacity):_capacity(capacity){}intget(intkey){autoit=_unorderedMap.find(key);if(it!=_unorderedMap.end()){_list.splice(_list.begin(),_list,it->se......
  • 分布式环境如何更新本地缓存
    引言本地缓存是一种常用的缓存手段,在客户端会经常使用这种手段来提升效率,但服务端在分布式环境下它出现的频率并不高,原因是本地缓存无法做到多台服务器数据共享,因此我们会采用redis这种分布式缓存,然而在某些情况下我们还是要使用的话怎么办呢?网上基本查不到有人去做这种分布式环......
  • LeetCode_0146. LRU缓存
    题目描述请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,intval......
  • 【架构设计】多级缓存:应用案例与问题解决策略
    【架构设计】多级缓存:应用案例与问题解决策略多级缓存系统的工作原理及其在提升应用性能方面的关键作用。通过对比本地缓存与分布式缓存的特点| 原创作者/编辑:凯哥Java                    | 分类:架构设计系列教程多级缓存系统:提升性能的......
  • 【架构设计】多级缓存:应用案例与问题解决策略
      【架构设计】多级缓存:应用案例与问题解决策略 多级缓存系统的工作原理及其在提升应用性能方面的关键作用。通过对比本地缓存与分布式缓存的特点 | 原创作者/编辑:凯哥Java                    | 分类:架构设计系列教程 ......
  • 读构建可扩展分布式系统:方法与实践05分布式缓存
    1. 分布式缓存1.1. 缓存存在于应用程序的许多地方1.1.1. 行应用程序的CPU具有高速多级硬件缓存,可以减少相对较慢的主内存访问1.1.2. 数据库引擎可以利用主内存来缓存数据存储的内容,这样在许多情况下查询就可以不用访问速度相对较慢的磁盘1.2. 分布式缓存是可扩展......
  • 清理C盘缓存,如果电脑卡了怎么清理C盘缓存呢
    当电脑因为C盘缓存过多而变得卡顿时,可以通过以下几种方法来清理C盘缓存,以恢复系统的流畅运行:一、使用Windows系统自带工具磁盘清理打开“此电脑”(或“我的电脑”),右键点击C盘,选择“属性”。在属性窗口中,点击“磁盘清理”。系统将自动扫描并列出可以清理的文件,如临时文件、回......
  • 清理C盘缓存,清理电脑C盘缓存垃圾的操作步骤
    清理电脑C盘缓存垃圾是维护系统性能和释放磁盘空间的重要步骤。以下是一些详细的操作步骤,供你参考:使用磁盘清理工具步骤:打开“此电脑”(或“我的电脑”):在桌面或文件资源管理器中找到并打开它。选择C盘并右键点击:在“此电脑”窗口中,找到并右键点击C盘(通常是系统盘)。选择“属......