django 使用redis进行页面数据缓存和更新缓存数据

转自:https://blog.csdn.net/xiaohuoche175/article/details/89304601

在开发过程中会遇到一些页面的数据是很长时间才进行更新的,不使用缓存的情况下,用户每次访问这些都需要先去数据库中获取这些数据,当访问量较大时,这样获取数据的方式就会降低页面的访问速度,影响效率,这时就可以使用redis将这些数据保存起来,通过判断是否生成过获取以及是否更新过数据来生成新的缓存数据

具体操作如下:

在settings.py里添加缓存设置

# Django的缓存配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/9",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
在对应的app中的views.py文件中写视图逻辑和缓存操作

from django.core.cache import cache
from goods.models import GoodsType, GoodsSKU, IndexGoodsBanner,IndexPromotionBanner,IndexTypeGoodsBanner

# Create your views here.

class IndexView(View):
def get(self,request):
‘‘‘显示首页‘‘‘
# 尝试从缓存中获取数据
context = cache.get(‘index_page_data‘)

if context is None:
print(‘设置缓存‘)
# 缓存中没有数据
# 获取商品的种类信息
types = GoodsType.objects.all()
print(types)

# 获取首页轮播商品信息
goods_banners = IndexGoodsBanner.objects.all().order_by(‘index‘)
print(goods_banners)

# 获取首页促销活动信息
promotion_banners = IndexPromotionBanner.objects.all().order_by(‘index‘)
print(promotion_banners)

# 获取首页分类商品展示信息
for type in types: # GoodsType
# 获取type种类首页分类商品的图片展示信息
image_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=1).order_by(‘index‘)
print(image_banners)
# 获取type种类首页分类商品的文字展示信息
title_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=0).order_by(‘index‘)
print(title_banners)

# 动态给type增加属性,分别保存首页分类商品的图片展示信息和文字展示信息
type.image_banners = image_banners
type.title_banners = title_banners
context = {‘types‘: types,
‘goods_banners‘: goods_banners,
‘promotion_banners‘: promotion_banners}

# 设置redis缓存
# key value timeout
cache.set(‘index_page_data‘, context, 3600)
return render(request, ‘index.html‘, context)
在对应的app中的admin.py文件中添加BaseModelAdmin,作用是当数据发生改变时,将之前的缓存删除,然后再通过视图逻辑生成新的缓存

from django.contrib import admin
from django.core.cache import cache
from goods.models import GoodsType,IndexPromotionBanner,IndexGoodsBanner,IndexTypeGoodsBanner
# Register your models here.

class BaseModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
‘‘‘新增或更新表中的数据时调用‘‘‘
super().save_model(request, obj, form, change)

# 发出任务,让celery worker重新生成首页静态页
from celery_tasks.tasks import generate_static_index_html
generate_static_index_html.delay()

# 清除首页的缓存数据
cache.delete(‘index_page_data‘)

def delete_model(self, request, obj):
‘‘‘删除表中的数据时调用‘‘‘
super().delete_model(request, obj)
# 发出任务,让celery worker重新生成首页静态页
from celery_tasks.tasks import generate_static_index_html
generate_static_index_html.delay()

# 清除首页的缓存数据
cache.delete(‘index_page_data‘)

class GoodsTypeAdmin(BaseModelAdmin):
pass

class IndexGoodsBannerAdmin(BaseModelAdmin):
pass

class IndexTypeGoodsBannerAdmin(BaseModelAdmin):
pass

class IndexPromotionBannerAdmin(BaseModelAdmin):
pass

admin.site.register(GoodsType, GoodsTypeAdmin)
admin.site.register(IndexGoodsBanner, IndexGoodsBannerAdmin)
admin.site.register(IndexTypeGoodsBanner, IndexTypeGoodsBannerAdmin)
admin.site.register(IndexPromotionBanner, IndexPromotionBannerAdmin)
————————————————
版权声明:本文为CSDN博主「小火skr车」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaohuoche175/article/details/89304601

原文地址:https://www.cnblogs.com/linwenbin/p/11485608.html

时间: 2024-08-01 22:21:25

django 使用redis进行页面数据缓存和更新缓存数据的相关文章

SQLCel匹配原数据信息,更新原数据所有信息并插入新数据的过程

使用SQLCel高效率(速度快,数据完整)的解决了我领导提的问题 “如何更新数据库中原有的数据并插入新的订单数据” 过程如下: 思路:使用字段匹配和修改字段即可解决问题,用时3分钟左右吧,在表已经建好的基础上. 旧数据: 将新数据插入已经建好的表中,如下: 使用SQLCel的字段匹配: 这样去匹配,能达到目的,状态被更新了结果如下图: 注:但是!!!!!!!!!如果像下面这样去匹配,会出现一个错误 或者这样匹配 ------------------------ 总结:目的基本是达到了,但是出现那

缓存穿透缓存雪崩,缓存击穿,django的6种缓存数据

缓存穿透,是指查询一个数据库一定不存在的数据.正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存.如果数据库查询对象为空,则不放进缓存. 想象一下这个情况,如果传入的参数为-1,会是怎么样?这个-1,就是一定不存在的对象.就会每次都去查询数据库,而每次查询都是空,每次又都不会进行缓存.假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库.即便是采用UUID,也是很容易找到一个不存在的KEY,进行攻击

Django使用Redis进行缓存详细最全流程

背景和意义服务器数据非经常更新.若每次都从硬盘读取一次,浪费服务器资源.拖慢响应速度.而且数据更新频率较高,服务器负担比较大.若保存到数据库,还需要额外建立一张对应的表存储数据.在Django中建立表通常做法是建立一个模型.看似简单,问题调试麻烦.开发时长久.为了进行服务器的加速,使用Redis进行缓存. 配置步骤如下1,服务器端安装redis(1)在Windows安装redis,方便测试 Redis不支持Windows!在它官网写得很清楚.但是开发环境一般是Windows系统.为了方便开发和调

学习猿地 python教程 django教程9 Django使用redis实现缓存

# Django使用redis实现缓存 ### 环境搭建安装 * 1,安装redis服务 ``` sudo apt-get install redis ``` * 2,安装django组件 ``` sudo pip3 install django-redis ``` ### Django项目配置 ```py settings.py CACHES = { "default": { # 引擎 "BACKEND": "django_redis.cache.Red

Django使用redis实现缓存

1. 安装 pip3 install django-redis 2. 配置(settings.py文件) CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", # 引擎 "TIMEOUT": 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期 "LOCATION": "redis://127

Magento2使用Redis进行页面缓存或会话存储。

1.Redis是一个可选的后端缓存解决方案,不过magento2默认使用的是Zend_Cache_Backend_File 2.Zend_Cache_Backend_File的问题 core_cache_tag表不断增长. 如果Magento实例具有多个网站和具有大型目录的网络商店,则该表可在不到一天内增长到1500万条记录. 插入到core_cache_tag会导致MySQL服务器的问题,包括性能降低. 3.为什么使用Redis Redis也可以用于PHP会话存储,使得可以使用Redis完全替

django在验证登录页面时遇到的数据查询问题

数据库查询时针对不存在的用户名进行验证 django在查询数据库时,可以使用get和filter两种方法. 两者的区别 当数据库内不存在该数据时,get会返回异常,而filter会返回空. 当数据库内查询结果大于1条时,get会返回异常,而filter会返回一个包含多个对象的结果集. 原文地址:https://www.cnblogs.com/chenych/p/11018897.html

django+celery+redis环境搭建

初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar.gz,cd httpd-2.0.63, ./configure --prefix=/usr/local/apache --enable-mods=all --enable-cache --enable-mem-cache --enable-file-cache --enable-rewrite(这一

Python Django 集成Redis Sentinel(哨兵)集群开发秒杀系统

我们知道秒杀系统最大特点是瞬时高并发.高访问量的系统.我们还要保证它的高可用性.这里我们采用Python Django 集成Redis Sentinel(哨兵)集群开发秒杀系统. Redis Sentinel(哨兵)集群Redis哨兵为Redis集群提供了高可用性.实际上这意味着我们可以使用哨兵模式创建一个可以不用人为干预而应对各种故障的Redis集群部署.可大大提高系统的高可用性. 哨兵模式还提供了其他的附加功能,如监控,通知,为客户端提供配置. 下面是在宏观层面上哨兵模式的功能列表: 监控: