我遇到了以下问题,不知道为什么。
我使用Django的缓存框架来缓存部分网站。
我将过期时间设置为15分钟。
有时,当我检查数据库时,高速缓存表中没有记录。首先,我怀疑Django将删除数据库中已过期的缓存。
但是后来,我发现表中仍然存在一些过期的缓存。
我想问Django如何处理数据库中的缓存?
Django是否会自动删除表中所有已过期的缓存?
谢谢!
答案 0 :(得分:1)
清除高速缓存的方式和时间取决于您所使用的高速缓存后端。通常,只有当缓存中的项目数超过指定的限制(而不是过期时)时,才会定期清除缓存-Django除非您尝试获取项目,否则不会进行检查从缓存中)。
从documentation上的缓存配置开始:
实施自己的剔除策略的缓存后端(即
error: initializer element is not constant {(&DriveCenter)(86),50,{stop,right,left,stop}}, note: (near initialization for 'fsm[0].fun') error: initializer element is not constant {(&DriveRight)(45),50,{stop,right,left,stop}},
,void DriveCenter(unsigned long out){ printf("\ncenter = %d",out); } typedef struct { void (*fun)(unsigned long out); unsigned long delay; unsigned long Next_State[4]; } state ; state fsm[4] ={ {(&DriveCenter)(86),50,{stop,right,left,stop}}, {(&DriveRight)(45),50,{stop,right,left,stop}}, {(&DriveLeft)(787),50,{stop,right,left,stop}}, {(&DriveStop)(33),50,{stop,right,left,stop}} };
和locmem
后端)将采用以下选项:
filesystem
:在删除旧值之前,高速缓存中允许的最大条目数。此参数默认为300。
database
:到达MAX_ENTRIES
时被剔除的条目分数。实际比率是CULL_FREQUENCY
,因此将MAX_ENTRIES
设置为2可以在达到1 / CULL_FREQUENCY
时剔除一半的条目。此参数应为整数,默认为3。
因此清除缓存的时间和方式取决于这些参数。默认情况下,不会清除整个缓存-仅删除一部分条目。