Django之缓存
缓存
关注公众号“轻松学编程”了解更多。
1、缓存的必要性
- 优化数据结构
- 优化了对数据的查询,筛选,过滤
- 减少了对磁盘的IO
2、缓存原理
- 获取数据的时候就是去缓存中拿
- 拿到了直接返回
- 没拿到就去数据库中查询,筛选,然后缓存到数据库, 然后返回给模板
3、实现方案
- 内存
- 文件
- 数据库
4、django内置的缓存模块
-
缓存配置
-
settings.py
CACHES = { 'default': { 'BACKEND':'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', 'OPTIONS': { 'MAX_ENTRIES': 1000 }, } }
-
创建缓存表
-
#[xxx] 为表名 若不指定则使用默认的,在settings.py中设置的
#即'LOCATION': 'my_cache_table'中的my_cache_table
python manage.py createcachetable [xxx]`
-
@cache_page(60)
- timeout
- cache
- 缓存到哪一个库中
- 很少使用
- 针对于系统配置了多个缓存
- key_prefix
- 前缀
- @cache_page(60,cache=‘sqlite’,key_prefix=‘sl-’)
-
原生cache
-
set(key, value, timeout)
-
get(key)
-
cache.set_many({‘a’: 1, ‘b’: 2, ‘c’: 3})
-
cache.get_many([‘a’, ‘b’, ‘c’])
-
cache.delete(‘a’)
-
cache.delete_many([‘a’, ‘b’, ‘c’])
-
cache.clear()
-
缓存视图函数
- template = loader.get_template(‘student_list.html’)
- result = template.render(data)
- ----------
- cache.set(‘get_students’, result, 60)
- students_cache = cache.get(‘get_students’)
views.py中应用
#把showBlogs中的context存进缓存,过期时间为60秒,前缀为blog,使用的缓存是settings.py中的default @cache_page(60,key_prefix='blog',cache='default') def showBlogs(request, pagenum): pass # 将数据丢给页面渲染 return render(request, 'blogs.html', context=data)
-
5、使用redis实现缓存
-
安装django-redis模块
-
用法和django内置的相同
-
settings.py设置
'redis_special': { "BACKEND": "django_redis.cache.RedisCache", #"LOCATION": "redis://:你的密码@服务器地址:6379/0", "LOCATION": "redis://:123456@127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", }, 'TIMEOUT': 60, },
在views.py中应用
def readBlog(request, blogid): #从缓存中获取内容 content = cache.get('readblog'+blogid) #如果缓存中没有内容就去数据库中查询 if not content: blog = Blog.objects.filter(id=blogid).first() if blog: template = loader.get_template('read-blog.html') content = template.render(context={'blog': blog}) #把content存进缓存 cache.set('readblog'+blogid,content) return HttpResponse(content) else: return HttpResponse('您查看的博文不存在') else: return HttpResponse(content)
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号
关注我,我们一起成长~~