Django缓存
程序员文章站
2024-03-23 17:32:58
...
缓存的概念
- 这里首先说明,我写的仅仅是为了方便理解,所以用词并不严谨,请各位看官见谅。
- 缓存是一种快速读取数据的介质,常规的数据读取方式是将数据从硬盘中读取出来,然后经过渲染呈现给用户。这样的频繁读取带来的IO操作会降低数据库的运行效率,大大降低用户体验。为了减小数据库的压力,优化用户体验,我们在第一次读取数据时将数据存储到内存中,以后如果再读取这一组数据时就直接从内存中读取,而不是再去硬盘读取,这样减少了重复的查询操作,减小了数据库的压力,也大大缩短了应用的响应时间,提升了用户体验。
- 使用缓存的逻辑:
- 判断需要的数据是否在缓存中
- 在:直接读取
- 不在: 查询数据库,返回需要的数据,同时将数据加载到缓存中
- 判断需要的数据是否在缓存中
- 缓存常用的方式:
- Memcache 缓存:是分布式的高速缓存系统,也是当下最火,最流行的。这里主要介绍memcache的使用。
- redis :说实话,redis数据库也可以承担缓存的任务,但是相对于redis的强大功能来说,有点杀鸡用宰牛刀了-_-!
- memcache服务的安装
- 请参考memcache安装经验
- 安装python-memcached,在命令行输入
pip install python-memcached
(ps:如果django项目使用的是anaconda的虚拟环境,请务必在虚拟环境下执行pip命令)
在Django项目中使用缓存
- 修改配置文件
-
首先需要找到全局配置文件global_settings.py,我的是在D:/anaconda/envs/DjangoPath/Lib/site-packages/django/conf/global_settings.py,因为这里使用的anaconda的虚拟环境,如果使用的是python的话应该是在安装目录的lib文件夹下。
-
打开global_settings.py文件,找到下面这段代码
# The cache backends to use. CACHES = { 'default': { 'BACKEND':'django.core.cache.backends.locmem.LocMemCache', } } CACHE_MIDDLEWARE_KEY_PREFIX = '' CACHE_MIDDLEWARE_SECONDS = 600 CACHE_MIDDLEWARE_ALIAS = 'default'
-
将这段代码复制出来,在自己django项目的settings.py文件的最后添加该代码,并将代码进行如下的修改:
# The cache backends to use. CACHES = { 'default': { #将cache后端修改为memcache 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', #添加memcache的服务地址 'LOCATION':[ '127.0.0.1:11211' ] } } CACHE_MIDDLEWARE_KEY_PREFIX = '' CACHE_MIDDLEWARE_SECONDS = 600 CACHE_MIDDLEWARE_ALIAS = 'default'
-
在视图中使用
#导入缓存使用的模块
from django.views.decorators.cache import cache_page
#在对应的视图前加装饰器cache_page(),cache_page()中必须设置缓存持续时间,这里的单位是秒,60*2代表2分钟
@cache_page(60*2)
#这个函数视图是我随意写的
def shoppingcart(request):
print('+++++++++++++++++++++++')
return HttpResponse('Hello')
- 解析一下运行结果:这里是通过在终端打印的结果来判断缓存是否存在的,第一次运行因为没有缓存所以终端会打印’+++++++++++++++++++++++’,当再次调用视图时,因为缓存的机制,什么也不会打印,因为调用的是之前已经写入内存中的数据。这里设置的缓存时间是两分钟,所以在两分钟后刷新页面还是会打印’+++++++++++++++++++++++’。
在路由中使用缓存
- 写法如下:
from django.urls import path,re_path
from .views import *
from django.views.decorators.cache import cache_page
urlpatterns = [
path('cacahtest/',cache_page(60*1)(cacahtest)),
]
- 效果跟在视图中使用一样。
视图内部数据的缓存使用
- 字不多打,直接上代码
from django.core.cache import cache
from django.http import HttpResponse
def viewcache(request):
order_number = request.GET.get('order_number')
# 从缓存中获取数据
data = cache.get(order_number)
print('--------')
if not data:
print('现在没有缓存')
# 设置缓存,缓存中的数据以键值对的形式存储,第一个参数是键名,第二个参数是对应的值,第三个参数是缓存存在时间
cache.set(order_number,15,90)
return HttpResponse('缓存添加成功')
return HttpResponse(data)
- 这个视图调用直接通过页面返回结果就可以判断缓存是否存在。
上一篇: 1. 两数之和