Django | 页面数据的缓存与使用
为什么要使用缓存?
一个动态网站的基本权衡点就是,它是动态的。 每次用户请求页面,服务器会重新计算。从开销处理的角度来看,这比你读取一个现成的标准文件的代价要昂贵的多
使用缓存,将多用户访问时基本相同的数据先缓存起来;这样当用户访问页面的时候,不需要重新计算数据,而是直接从缓存里读取,避免性能上的开销。
使用Redis数据库
使用redis数据库存储缓存,首先redis是key-value类型的数据库,NoSQL,且也是内存型数据库,redis是将数据加载到内存中,进行操作,并异步将数据备份到硬盘里。而我们知道,内存的读取速度要比硬盘的读取速度快,因此Redis的读取速度要比其他文件型数据库快很多。
配置django的缓存设置
settings.py中添加:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://172.16.3.241:6379/9", //指向装有redis的服务器IP地址:端口 /9表示使用db9
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
使用Django内置的缓存API (cache)
导入 from django.core.cache import cache

例子
在视图类或视图函数中,首先先别急着计算页面数据;而是先向缓存读取该页面的数据;若返回一个None;说明没有缓存或缓存的数据已经过期;此时才需要进行数据库查询等计算服务
并将更新后的数据写入缓存中,自始至终同一页面都统一使用一个key进行存取或删除;
# 缓存的设置与获取
伪代码: content= cache.get(‘index_data’) if content is None: 查询数据等 cache.set(‘index_data’,content,timeout) # 设置缓存 # 渲染页面
缓存设置了过期时间timeout,单位为秒,当到达过期时间之后,该缓存的数据将不会被使用,以此来确保缓存数据不会一直都是同一份。
但假如我设定timeout为3600,即60分钟,那么在60分钟内,如网页的数据被更新了,而用户访问时只能显示旧的页面数据,因此为了保证缓存的时效性,
可以在数据更改时删除旧缓存。
如在django自带的管理页面中,当模型发生修改时,会默认调用admin.ModelAdmin的save_model 或 delete_model 方法。因此,继承并重写该方法,并在里面添加
删除缓存的代码,则网站管理员通过自带管理页面修改数据时,旧的页面缓存会被清除
如:
class BaseModel(admin.ModelAdmin):
'''
继承admin.ModelAdmin
重写save_model / delete_model 方法
''' def save_model(self, request, obj, form, change): super().save_model(request,obj,form,change) # 删除首页缓存
cache.delete('index_data')
# 删除类型和新品推荐的缓存
cache.delete('types_and_newsku') def delete_model(self, request, obj): super().delete_model(request,obj) #删除首页缓存
cache.delete('index_data')
# 删除类型和新品推荐的缓存
cache.delete('types_and_newsku')
Django | 页面数据的缓存与使用的更多相关文章
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
- 用angular怎么缓存父页面数据
angular做单页面应用是一个比较好的框架,但是它有一定的入门难度,对于新手来说可能会碰到很多坑,也有许多难题,大部分仔细看文档,找社区是能解决的. 但有些问题也许资料比较少,最近遇到过一个要缓存父 ...
- 如何利用`keep-alive`按需缓存页面数据
随着项目不断变大,页面变多,搜索条件也随之也越来越多,而每次跳转页面再返回时,之前的筛选的条件都会别清空.之前在elment-ui table组件 -- 远程筛选排序提到过缓存,但是有所取巧,这次重新 ...
- Django: 之用户注册、缓存和静态网页
Django 用户注册系统 Django 的源码中已经有登录,退出,重设密码等相关的视图函数,在下面这个app中 django.contrib.auth 可以点击对应的版本查看相关源代码:1.9 1 ...
- Django的几种缓存的配置
1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会 ...
- django框架进阶-使用缓存-长期维护
############### django-缓存页面 ############### ########################################### # 全站缓存, ...
- spring ehcache 页面、对象缓存
一.Ehcache基本用法 CacheManager cacheManager = CacheManager.create(); // 或者 cacheManager = CacheManager.g ...
- Ehcache 整合Spring 使用页面、对象缓存
Ehcache 整合Spring 使用页面.对象缓存 Ehcache在很多项目中都出现过,用法也比较简单.一 般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布 ...
- (转)Ehcache 整合Spring 使用页面、对象缓存
Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的 ...
随机推荐
- Python从入门到精通之Sixth!
补充:enumerate 函数用于遍历序列(元组tuple.列表list.字典dict)中的元素以及它们的下标: >>> for i,j in enumerate(('a','b', ...
- Linux的历史发展及应用
Linux的基本介绍: Linux的历史: 操作系统,英语Operating System简称为OS.说道操作系统就需要先讲一讲Unix,UNIX操作系统,是一个强大的多用户.多任务操作系统,支持多种 ...
- Codeforces Round #548 (Div. 2) E 二分图匹配(新坑) or 网络流 + 反向处理
https://codeforces.com/contest/1139/problem/E 题意 有n个学生,m个社团,每个学生有一个\(p_i\)值,然后每个学生属于\(c_i\)社团, 有d天,每 ...
- DataTransfer对象的一些总结
所有元素都支持防止目标事件,但是这些元素默认是不允许释放的,如果拖动元素经过不允许放置的元素无论用户如何操作,都不会触发drop事件,不过可以把任何元素变成有效的放置目标.方法是重写dropenter ...
- IO流的种类
字节流:InputStream(new FileInputStream(new File()); Outpustream(new FileOutputStream(new File()); 字符流: ...
- javaean(web作业)
javabean简介: javabean是java语言开发的可重用组件,在jsp中使用javabean可以减少代码的重复量,使代码简洁. 他的优点: 1.可将HTML和Java代码分离,这主要是为了日 ...
- 如何下载官网上下载历史Java版本(老版本Java)
首先先打开Oracle的官网 -->Oracle 然后选择Trials and Downloads 然后往下翻,选择java(JDK) 然后看到了这个,再往下翻 点他,然后就是选择你想下载 ...
- openXML写Excel列组合
重要代码: DOS.SheetData sheetData = new DOS.SheetData(); DOS.Columns columns = new DOS.Columns(); DOS.Co ...
- shell中的常用条件判断
-e :该“文件名”是否存在.exit-d :该文件名是否为目录.dir-f :该文件名是否为普通文件.file -b:该文件是否为块文件.block -r :该文件是否具有可读属性 read-w ...
- poj 1026
这题一开始没看清楚 等级差距不超过1 1->2->3 就是错误的,因为3-1==2 ,意思是间接的也不行 其次等级最小是1,最大是n 你要到达1号首领的位置 假设1号等级x,限制m,最大上 ...