首 页 行业热点 新车 试驾评测 养车用车 车型库

django缓存怎么用(django使用redis缓存)

发布网友 发布时间:2024-09-17 03:34

我来回答

1个回答

热心网友 时间:2024-10-04 09:43

本篇文章给大家谈谈django缓存怎么用,以及django使用redis缓存对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:1、如何清理django产生的缓存2、django-redis结合drf实现缓存3、如何django中用redis缓存服务器,求详细教程。4、如何在django中使用redis做缓存服务器5、Django什么情况6、如何为SAEDjango工程设置全站Memcached缓存如何清理django产生的缓存

你是使用多进程的方式启动的吧,应该是部分进程更新了,刷新后会随机使用某个进程执行代码,所以会有旧的和新的同时出现,你重启下django吧。

不过也有另一种可能你做了页面换成,在view上使用了django的cache修饰器,这样的话需要先删除所有服务器上的缓存。

如果解决了您的问题请采纳!

如果未解决请继续追问

django-redis结合drf实现缓存

一、django_redis

1.django-redis基于BSD许可,是一个使Django支持Rediscache/session后端的全功能组件.

二、django-redis自身优点:

●持续更新

●本地化的redis-pyURL符号连接字符串

●可扩展客户端

●可扩展解析器

●可扩展序列器

●默认客户端主/从支持

●完善的测试

●已在一些项目的生产环境中作为cache和session使用

●支持永不超时设置

●原生进入redis客户端/连接池支持

●高可配置(例如仿真缓存的异常行为)

●默认支持unix套接字

●支持Python2.7,3.4,3.5以及3.6

三、推荐使用版本

四、django_redis基本的使用操作:

五、在django项目中的配置格式

六、自定义redis的工具类

七、自定义rediskey协议

八、视图调用缓存

如何django中用redis缓存服务器,求详细教程。

django-redis中文文档

AndreyAntukh,niwi@niwi.be4.7.0

翻译:RaPoSpectre

1.介绍

django-redis基于BSD许可,是一个使Django支持Rediscache/session后端的全功能组件.

1.1为何要用django-redis?

因为:

持续更新

本地化的redis-pyURL符号连接字符串

可扩展客户端

可扩展解析器

可扩展序列器

默认客户端主/从支持

完善的测试

已在一些项目的生产环境中作为cache和session使用

支持永不超时设置

原生进入redis客户端/连接池支持

高可配置(例如仿真缓存的异常行为)

默认支持unix套接字

支持Python2.7,3.4,3.5以及3.6

1.2可用的django-redis版本

稳定版本:4.7.0

稳定版本:3.8.4

1.3我该使用哪个版本

版本号像3.6,3.7…等的是主要发行版本,会包含向后不兼容的内容.跟多信息请在升级前阅读升级日志.

版本号像3.7.0,3.7.1…等的是小更新或者bug修复版本,一般只会包含bug修复,没有功能更新.

1.4依赖

1.4.1Django版本支持

django-redis3.8.x支持django1.4,1.5,1.6,1.7(或许会有1.8)

django-redis4.4.x支持django1.6,1.7,1.8,1.9和1.10

1.4.2RedisServer支持

django-redis3.x.y支持redis-server2.6.x或更高

django-redis4.x.y支持redis-server2.8

如何在django中使用redis做缓存服务器

实现缓存的方式,有多种,本地内存缓存,数据库缓存,文件系统缓存。这里介绍使用Redis数据库进行缓存。

环境

redis

django-redis

配置

settings.py

CACHES={??"default":{????"BACKEND":"django_redis.cache.RedisCache",????"LOCATION":"redis://127.0.0.1:6379/1",????"OPTIONS":{??????"CLIENT_CLASS":"django_redis.client.DefaultClient",??????"PASSWORD":"mysecret"

????}

??}

}

pythonmanage.pycreatecachetable1

缓存有站点缓存,和单个view缓存

站点缓存:?

settings.py

??MIDDLEWARE=[??#站点缓存,注意必须在第一个位置

??'django.middleware.cache.UpdateCacheMiddleware',

??...??#站点缓存,注意必须在最后一个位置

??'django.middleware.cache.FetchFromCacheMiddleware',

]

视图缓存:?

views.py

fromdjango.shortcutsimportrenderfromdjango.views.decorators.cacheimportcache_pagefromcache.modelsimportFoo#在需要缓存的视图上添加装饰器,参数是设置timeout超时时间,单位是秒,@cache_page(60)defindex(request):

??bar=Foo.objects.all()??returnrender(request,'cache/index.html',{'bar':bar})

Django什么情况

在朋友和同事的极力推荐下最近开始看上了python,其实主要是还是因为python是2007年度语言,怎么的也要与时俱进呀.最近一路看来有些心得,希望能与大家分享,小弟其实也只接触不到一周的python,有说错的地方还望大家指出改正.

不打算从py的语法基础说起了,直接说说对django的心得:

接触django首先需要了解可能就是他那个model,建立一个model就什么都有了,这对于搞java得人员来说还是挺有吸引力的(当然貌似对于动态语言这都是小儿科),那么让我们先看一个model的例子:

偷懒了,直接拿django-admin里面的User出来了

classUser(models.Model):

username=models.CharField(_('username'),maxlength=30,unique=True,validator_list=[validators.isAlphaNumeric]))

first_name=models.CharField(_('firstname'),maxlength=30,blank=True)

last_name=models.CharField(_('lastname'),maxlength=30,blank=True)

email=models.EmailField(_('e-mailaddress'),blank=True)

password=models.CharField(_('password'),maxlength=128))

classMeta:

ordering=('username',)

每个属性就是一个库表的字段,定义起来非常简单明了,models里面提供了很多种类的Field类似上面的EmailField。不同的Field有不同的设置,可以看相应的原来来了解相关的设置.

在modelclass内部还有一个classMeta,这个Class的属性制定了这个表的一些存取策略,例如这里的ordering。MetaClass里面的属性可以用model的_meta属性取得。OK,那么这样一个model怎么就能实现对数据库表的灵活操作了呢。让我们来看看吧。

首先先分析一下/django/django/db/models/base.py这个文件,其中包含了models.Model这类的定义:

看看class定义的第一行吧,第一行就够我琢磨一阵子的了:

classModel(object):

__metaclass__=ModelBase

Model采用了newstyleclass定义,关于这个内容大家可以放狗看一下,第一行是一个__metaclass__属性的定义,该属性的值是ModelBase,这是一个类。__metaclass__的意思是,指定一个class,这个class的实例就是本class,相信您已经晕了。那么就拿这个Model的例子来说明一下,如果没有__metaclass__这个属性,产生一个实例就是正常的流程,有了这个属性流程会有改变:

首先调用BaseModel.__new__(cls,name,bases,attrs)这个方法,回返回的值是一个class类型,然后用这个class来创建实例。其实BaseModel就是Model的元类,来制定Model这个类的最终样子。关于元类的更多信息请看这里

那么我们的目光一下转移到BaseModel这个类上,我有种直觉,Meta这个class最后可以用_meta来取就是在这里做的手脚,看一下BaseModel的定义吧,有点长:

classModelBase(type):

"Metaclassforallmodels"

def__new__(cls,name,bases,attrs):

#Ifthisisn'tasubclassofModel,don'tdoanythingspecial.

ifname=='Model'ornotfilter(lambdab:issubclass(b,Model),bases):#1

returnsuper(ModelBase,cls).__new__(cls,name,bases,attrs)

#Createtheclass.

new_class=type.__new__(cls,name,bases,{'__module__':attrs.pop('__module__')})#2

new_class.add_to_class('_meta',Options(attrs.pop('Meta',None)))#3

new_class.add_to_class('DoesNotExist',types.ClassType('DoesNotExist',(ObjectDoesNotExist,),{}))

#Buildcompletelistofparents#4

forbaseinbases:

#TODO:Checkingforthepresenceof'_meta'ishackish.

if'_meta'indir(base):

new_class._meta.parents.append(base)

new_class._meta.parents.extend(base._meta.parents)

model_module=sys.modules[new_class.__module__]

ifgetattr(new_class._meta,'app_label',None)isNone:

#Figureouttheapp_labelbylookingonelevelup.

#For'django.contrib.sites.models',thiswouldbe'sites'.

new_class._meta.app_label=model_module.__name__.split('.')[-2]#5

#Bailoutearlyifwehavealreadycreatedthisclass.

m=get_model(new_class._meta.app_label,name,False)#6

ifmisnotNone:

returnm

#Addallattributestotheclass.

forobj_name,objinattrs.items():

new_class.add_to_class(obj_name,obj)#7

#AddFieldsinheritedfromparents

forparentinnew_class._meta.parents:

forfieldinparent._meta.fields:

#Onlyaddparentfieldsiftheyaren'tdefinedforthisclass.

try:

new_class._meta.get_field(field.name)

exceptFieldDoesNotExist:

field.contribute_to_class(new_class,field.name)#8

new_class._prepare()

register_models(new_class._meta.app_label,new_class)#9

#Becauseofthewayimportshappen(recursively),wemayormaynotbe

#thefirstclassforthismodeltoregisterwiththeframework.There

#shouldonlybeoneclassforeachmodel,sowemustalwaysreturnthe

#registeredversion.

returnget_model(new_class._meta.app_label,name,False)#10

简单分析一下这个代码:

1.检查class是否为Model的子类,不是的话,不做任何处理,直接传给父类处理,也就相当于正常的处理了class,注意super在多重继承的时候应该严格使用

2.用type来创建类,创建的就是正常的ModelClass

3.这句很重要,add_to_class是Model里面的class方法,这个方法其实就是传入name和value,给Model添加class属性.看到了,原来神奇的_meta就是这么来的.提到add_to_class方法,简单看一下它的代码:

defadd_to_class(cls,name,value):

ifname=='Admin':

asserttype(value)==types.ClassType,"%rattributeof%smodelmustbeaclass,nota%sobject"%(name,cls.__name__,type(value))

value=AdminOptions(**dict([(k,v)fork,vinvalue.__dict__.items()ifnotk.startswith('_')]))

ifhasattr(value,'contribute_to_class'):

value.contribute_to_class(cls,name)

else:

setattr(cls,name,value)

add_to_class=classmethod(add_to_class)

最后一句是制定这个方法是class方法,特点就是方法的第一个参数是本class,其实classmethod就是一个装饰器,在2。4之后可以使用@来简写。这里不得不提的是他对Admin的特殊处理,虽然AdminOption不是在admin模块里面的,但是这么做还是跟一个Admin的东东绑定起来了,在java的世界解耦是一件大事,看到下面还有对'contribute_to_class'这个方法的特殊处理,django为啥不弄的解耦点呢。而且同样是包装成Option,一个是在BaseModel里面弄(那个Meta的包装),一个在add_to_class方法里面弄,实在有点不优雅,可能还没了解太多,不知道他的深度用意吧。

4.Meta的集成,Option的这个类提供继承方法

5.取得applabel,就是把model的名字分割取到数第二个,我很喜欢-2这样的设定

6.get_model方法取得缓存里面的东西。

7.把所有的classattr拿出来搞一遍,一般的属性就setattr弄回去了,要是这个属性有contribute_to_class这个callable属性,那就执行之(Admin的处理完全也可以这样,其实我们常用的objects就是用这个方法弄的)

8.每个Field调用自己的contribute_to_class方法来进行特殊的处理

9.进入缓存,,暂且叫缓存吧,里面的东西大家看看很简单文件在/django/django/db/models/loading.py里面还是有很多内容的

10.看注释说的很清楚了,我们一定要在缓存里面拿model。

如何为SAEDjango工程设置全站Memcached缓存

1

在服务管理-Memcache中初始化Memcache服务,并分配合适的容量。

2

修改settings.py,添加配置:

3

一段时间后,即可在SAE服务管理—Memcache中观察缓存命中率和内存使用情况

关于django缓存怎么用和django使用redis缓存的介绍到此就结束了,不知道你从中找到你需要的信息了吗?如果你还想了解更多这方面的信息,记得收藏关注本站。

热心网友 时间:2024-10-04 09:43

本篇文章给大家谈谈django缓存怎么用,以及django使用redis缓存对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:1、如何清理django产生的缓存2、django-redis结合drf实现缓存3、如何django中用redis缓存服务器,求详细教程。4、如何在django中使用redis做缓存服务器5、Django什么情况6、如何为SAEDjango工程设置全站Memcached缓存如何清理django产生的缓存

你是使用多进程的方式启动的吧,应该是部分进程更新了,刷新后会随机使用某个进程执行代码,所以会有旧的和新的同时出现,你重启下django吧。

不过也有另一种可能你做了页面换成,在view上使用了django的cache修饰器,这样的话需要先删除所有服务器上的缓存。

如果解决了您的问题请采纳!

如果未解决请继续追问

django-redis结合drf实现缓存

一、django_redis

1.django-redis基于BSD许可,是一个使Django支持Rediscache/session后端的全功能组件.

二、django-redis自身优点:

●持续更新

●本地化的redis-pyURL符号连接字符串

●可扩展客户端

●可扩展解析器

●可扩展序列器

●默认客户端主/从支持

●完善的测试

●已在一些项目的生产环境中作为cache和session使用

●支持永不超时设置

●原生进入redis客户端/连接池支持

●高可配置(例如仿真缓存的异常行为)

●默认支持unix套接字

●支持Python2.7,3.4,3.5以及3.6

三、推荐使用版本

四、django_redis基本的使用操作:

五、在django项目中的配置格式

六、自定义redis的工具类

七、自定义rediskey协议

八、视图调用缓存

如何django中用redis缓存服务器,求详细教程。

django-redis中文文档

AndreyAntukh,niwi@niwi.be4.7.0

翻译:RaPoSpectre

1.介绍

django-redis基于BSD许可,是一个使Django支持Rediscache/session后端的全功能组件.

1.1为何要用django-redis?

因为:

持续更新

本地化的redis-pyURL符号连接字符串

可扩展客户端

可扩展解析器

可扩展序列器

默认客户端主/从支持

完善的测试

已在一些项目的生产环境中作为cache和session使用

支持永不超时设置

原生进入redis客户端/连接池支持

高可配置(例如仿真缓存的异常行为)

默认支持unix套接字

支持Python2.7,3.4,3.5以及3.6

1.2可用的django-redis版本

稳定版本:4.7.0

稳定版本:3.8.4

1.3我该使用哪个版本

版本号像3.6,3.7…等的是主要发行版本,会包含向后不兼容的内容.跟多信息请在升级前阅读升级日志.

版本号像3.7.0,3.7.1…等的是小更新或者bug修复版本,一般只会包含bug修复,没有功能更新.

1.4依赖

1.4.1Django版本支持

django-redis3.8.x支持django1.4,1.5,1.6,1.7(或许会有1.8)

django-redis4.4.x支持django1.6,1.7,1.8,1.9和1.10

1.4.2RedisServer支持

django-redis3.x.y支持redis-server2.6.x或更高

django-redis4.x.y支持redis-server2.8

如何在django中使用redis做缓存服务器

实现缓存的方式,有多种,本地内存缓存,数据库缓存,文件系统缓存。这里介绍使用Redis数据库进行缓存。

环境

redis

django-redis

配置

settings.py

CACHES={??"default":{????"BACKEND":"django_redis.cache.RedisCache",????"LOCATION":"redis://127.0.0.1:6379/1",????"OPTIONS":{??????"CLIENT_CLASS":"django_redis.client.DefaultClient",??????"PASSWORD":"mysecret"

????}

??}

}

pythonmanage.pycreatecachetable1

缓存有站点缓存,和单个view缓存

站点缓存:?

settings.py

??MIDDLEWARE=[??#站点缓存,注意必须在第一个位置

??'django.middleware.cache.UpdateCacheMiddleware',

??...??#站点缓存,注意必须在最后一个位置

??'django.middleware.cache.FetchFromCacheMiddleware',

]

视图缓存:?

views.py

fromdjango.shortcutsimportrenderfromdjango.views.decorators.cacheimportcache_pagefromcache.modelsimportFoo#在需要缓存的视图上添加装饰器,参数是设置timeout超时时间,单位是秒,@cache_page(60)defindex(request):

??bar=Foo.objects.all()??returnrender(request,'cache/index.html',{'bar':bar})

Django什么情况

在朋友和同事的极力推荐下最近开始看上了python,其实主要是还是因为python是2007年度语言,怎么的也要与时俱进呀.最近一路看来有些心得,希望能与大家分享,小弟其实也只接触不到一周的python,有说错的地方还望大家指出改正.

不打算从py的语法基础说起了,直接说说对django的心得:

接触django首先需要了解可能就是他那个model,建立一个model就什么都有了,这对于搞java得人员来说还是挺有吸引力的(当然貌似对于动态语言这都是小儿科),那么让我们先看一个model的例子:

偷懒了,直接拿django-admin里面的User出来了

classUser(models.Model):

username=models.CharField(_('username'),maxlength=30,unique=True,validator_list=[validators.isAlphaNumeric]))

first_name=models.CharField(_('firstname'),maxlength=30,blank=True)

last_name=models.CharField(_('lastname'),maxlength=30,blank=True)

email=models.EmailField(_('e-mailaddress'),blank=True)

password=models.CharField(_('password'),maxlength=128))

classMeta:

ordering=('username',)

每个属性就是一个库表的字段,定义起来非常简单明了,models里面提供了很多种类的Field类似上面的EmailField。不同的Field有不同的设置,可以看相应的原来来了解相关的设置.

在modelclass内部还有一个classMeta,这个Class的属性制定了这个表的一些存取策略,例如这里的ordering。MetaClass里面的属性可以用model的_meta属性取得。OK,那么这样一个model怎么就能实现对数据库表的灵活操作了呢。让我们来看看吧。

首先先分析一下/django/django/db/models/base.py这个文件,其中包含了models.Model这类的定义:

看看class定义的第一行吧,第一行就够我琢磨一阵子的了:

classModel(object):

__metaclass__=ModelBase

Model采用了newstyleclass定义,关于这个内容大家可以放狗看一下,第一行是一个__metaclass__属性的定义,该属性的值是ModelBase,这是一个类。__metaclass__的意思是,指定一个class,这个class的实例就是本class,相信您已经晕了。那么就拿这个Model的例子来说明一下,如果没有__metaclass__这个属性,产生一个实例就是正常的流程,有了这个属性流程会有改变:

首先调用BaseModel.__new__(cls,name,bases,attrs)这个方法,回返回的值是一个class类型,然后用这个class来创建实例。其实BaseModel就是Model的元类,来制定Model这个类的最终样子。关于元类的更多信息请看这里

那么我们的目光一下转移到BaseModel这个类上,我有种直觉,Meta这个class最后可以用_meta来取就是在这里做的手脚,看一下BaseModel的定义吧,有点长:

classModelBase(type):

"Metaclassforallmodels"

def__new__(cls,name,bases,attrs):

#Ifthisisn'tasubclassofModel,don'tdoanythingspecial.

ifname=='Model'ornotfilter(lambdab:issubclass(b,Model),bases):#1

returnsuper(ModelBase,cls).__new__(cls,name,bases,attrs)

#Createtheclass.

new_class=type.__new__(cls,name,bases,{'__module__':attrs.pop('__module__')})#2

new_class.add_to_class('_meta',Options(attrs.pop('Meta',None)))#3

new_class.add_to_class('DoesNotExist',types.ClassType('DoesNotExist',(ObjectDoesNotExist,),{}))

#Buildcompletelistofparents#4

forbaseinbases:

#TODO:Checkingforthepresenceof'_meta'ishackish.

if'_meta'indir(base):

new_class._meta.parents.append(base)

new_class._meta.parents.extend(base._meta.parents)

model_module=sys.modules[new_class.__module__]

ifgetattr(new_class._meta,'app_label',None)isNone:

#Figureouttheapp_labelbylookingonelevelup.

#For'django.contrib.sites.models',thiswouldbe'sites'.

new_class._meta.app_label=model_module.__name__.split('.')[-2]#5

#Bailoutearlyifwehavealreadycreatedthisclass.

m=get_model(new_class._meta.app_label,name,False)#6

ifmisnotNone:

returnm

#Addallattributestotheclass.

forobj_name,objinattrs.items():

new_class.add_to_class(obj_name,obj)#7

#AddFieldsinheritedfromparents

forparentinnew_class._meta.parents:

forfieldinparent._meta.fields:

#Onlyaddparentfieldsiftheyaren'tdefinedforthisclass.

try:

new_class._meta.get_field(field.name)

exceptFieldDoesNotExist:

field.contribute_to_class(new_class,field.name)#8

new_class._prepare()

register_models(new_class._meta.app_label,new_class)#9

#Becauseofthewayimportshappen(recursively),wemayormaynotbe

#thefirstclassforthismodeltoregisterwiththeframework.There

#shouldonlybeoneclassforeachmodel,sowemustalwaysreturnthe

#registeredversion.

returnget_model(new_class._meta.app_label,name,False)#10

简单分析一下这个代码:

1.检查class是否为Model的子类,不是的话,不做任何处理,直接传给父类处理,也就相当于正常的处理了class,注意super在多重继承的时候应该严格使用

2.用type来创建类,创建的就是正常的ModelClass

3.这句很重要,add_to_class是Model里面的class方法,这个方法其实就是传入name和value,给Model添加class属性.看到了,原来神奇的_meta就是这么来的.提到add_to_class方法,简单看一下它的代码:

defadd_to_class(cls,name,value):

ifname=='Admin':

asserttype(value)==types.ClassType,"%rattributeof%smodelmustbeaclass,nota%sobject"%(name,cls.__name__,type(value))

value=AdminOptions(**dict([(k,v)fork,vinvalue.__dict__.items()ifnotk.startswith('_')]))

ifhasattr(value,'contribute_to_class'):

value.contribute_to_class(cls,name)

else:

setattr(cls,name,value)

add_to_class=classmethod(add_to_class)

最后一句是制定这个方法是class方法,特点就是方法的第一个参数是本class,其实classmethod就是一个装饰器,在2。4之后可以使用@来简写。这里不得不提的是他对Admin的特殊处理,虽然AdminOption不是在admin模块里面的,但是这么做还是跟一个Admin的东东绑定起来了,在java的世界解耦是一件大事,看到下面还有对'contribute_to_class'这个方法的特殊处理,django为啥不弄的解耦点呢。而且同样是包装成Option,一个是在BaseModel里面弄(那个Meta的包装),一个在add_to_class方法里面弄,实在有点不优雅,可能还没了解太多,不知道他的深度用意吧。

4.Meta的集成,Option的这个类提供继承方法

5.取得applabel,就是把model的名字分割取到数第二个,我很喜欢-2这样的设定

6.get_model方法取得缓存里面的东西。

7.把所有的classattr拿出来搞一遍,一般的属性就setattr弄回去了,要是这个属性有contribute_to_class这个callable属性,那就执行之(Admin的处理完全也可以这样,其实我们常用的objects就是用这个方法弄的)

8.每个Field调用自己的contribute_to_class方法来进行特殊的处理

9.进入缓存,,暂且叫缓存吧,里面的东西大家看看很简单文件在/django/django/db/models/loading.py里面还是有很多内容的

10.看注释说的很清楚了,我们一定要在缓存里面拿model。

如何为SAEDjango工程设置全站Memcached缓存

1

在服务管理-Memcache中初始化Memcache服务,并分配合适的容量。

2

修改settings.py,添加配置:

3

一段时间后,即可在SAE服务管理—Memcache中观察缓存命中率和内存使用情况

关于django缓存怎么用和django使用redis缓存的介绍到此就结束了,不知道你从中找到你需要的信息了吗?如果你还想了解更多这方面的信息,记得收藏关注本站。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com