热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

14.django缓存简单介绍

缓存的定义定义:缓存是一类可以更快的读取数据的介质统称,也指其他可以加快数据读取的存储方式。一般用来存储临时数据,常用的介质是读取速度更

缓存的定义

定义:缓存是一类可以更快的读取数据的介质统称,也指其他可以加快数据读取的存储方式。一般用来存储临时数据,常用的介质是读取速度更快的内存

缓存配置


将缓存的数据存储在数据库中

说明: 把一次查询负责查询的结果直接存储到表里,例如多个条件的过滤查询结果,可以避免重复进行复杂查询,提升效率;通常会用redis来代替。

CACHES = {
‘default’:{
‘BACKEND’:‘django.core.cache.backends.db.DatabaseCache’,
‘LOCATION’:‘my_cache_table’,
‘TIMEOUT’:‘300’, # 缓存保存时间 单位秒 默认值为300
‘OPTIONS’:{
‘MAX_ENTRIES’:300, #缓存最大数据条数
‘CULL_FREQUENCE’:2, # 缓存条数达到最大值
}
}
}

数据库缓存到服务器内存中

CACHES = {'default':{'BACKEND':'django.core.cache.backends.db.LocMemCache','LOCATION':'unqiue-snowfiake'}
}

缓存数据到本地文件中

CACHES = {
‘default’:{
‘BACKEND’:‘django.core.cache.backends.filebased.FileBasedCache’,
‘LOCATION’:’/tmp/django_cache’
}
}

示例

CACHES = {'default':{'BACKEND':'django.core.cache.backends.db.DatabaseCache','LOCATION':'my_cache_table','TIMEOUT':'300', # 缓存保存时间 单位秒 默认值为300'OPTIONS':{'MAX_ENTRIES':300, #缓存最大数据条数'CULL_FREQUENCE':2, # 缓存条数达到最大值}}
}

[root@sdns tedu_note]# python manage.py createcachetable
[root@sdns tedu_note]# python manage.py migrate
Operations to perform:Apply all migrations: admin, auth, contenttypes, note, sessions, user
Running migrations:No migrations to apply.

mysql> desc my_cache_table;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| cache_key | varchar(255) | NO | PRI | NULL | |
| value | longtext | NO | | NULL | |
| expires | datetime(6) | NO | MUL | NULL | |
+-----------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

整体缓存策略

from django.views.decorators.cache import cache_page
@cache_page(30) # 秒
def fun_view(request):....

或者在路由中
from django.views.decorators.cache import cache_page
urlpatterns = [path('cache/',cache_page(60)(cache_view)),

  • 示例

import time
from django.http import HttpResponse
from django.views.decorators.cache import cache_page
@cache_page(15)
def test_cache(request):# 拿到的都是缓存中的数据,15秒内这个时间应该是不变的t=time.time()return HttpResponse('t is %s'%(t))

局部缓存


缓存api的使用

先引入cache对象
方式1: 使用caches[‘CACHE配置KEY’] 导入具体对象
from django.core.cache import caches
方式2 : from django.core.cache import cache 相当于直接引入CACHES配置项中的’DEFAULT’项

相关命令


  1. cache.set(key,value,timeout) 存储缓存
    key: 缓存key,字符串类型
    value : Python对象
    timeout: 缓存时间(s)
    返回值: None

  2. cache.get(key) 获取缓存
    key: 缓存key,字符串类型
    返回值: 为key的具体指,如果没有数据,则返回None

  3. cache.add(key,value) 存储缓存,只有在key不存在时生效
    返回值: True 或者 False

  4. cache.get_or_set(key,value,timeout) 如果未获取到数据,则执行set操作
    返回值:value

  5. cache.set_many(dict,timeout) 批量存储缓存
    dict: key 和 value的字典
    timeout: 存储时间(s)
    返回值: 插入不成功的key的数组

  6. cache.get_many(key_list) 批量获取缓存数据
    key_list : 包含key的数组
    返回值: 去到key和value的字典

  7. cache.delete(key) 删除指定key的缓存数据
    返回值:None

  8. cache.delete_many(key_list) 批量删除
    返回值:None


示例

>>> from django.core.cache import cache
>>> cache.set('uuname','hulk',20) # 20 表示时间
>>> cache.get('uuname')
'hulk'


推荐阅读
author-avatar
yangerzhou
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有