在Django中使用Redis数据库做缓存
何为Redis?
redis是一个key-value存储系统。
首先我们需要了解redis能够做什么?
redis不单单可以做缓存,还可以做:排行榜、计算器、限速器、好友关系、简单消息队列、session服务器
在日常的项目开发中,当我们的数据库大起来之后,后台向数据库查找速度会变得很慢,这时候我们需要缓存来帮助我们提高浏览器的工作效率
动态网站存在一个基本权衡是——它们是动态的。每次用户请求一个页面,web 服务器需要提供各种各样的计算——从数据库查询到模板渲染再到业务逻辑——最后建立页面呈现给用户。从处理开销的角度来看,这比标准读取文件系统服务安排的开销要高得多。
我们可以缓存一些经过大量费事的计算结果
Django 带有一个强大的缓存系统,你可以将动态页面保存,这样不用每次请求页面时都计算。
Memcached
Memcached 是一个完全基于内存的缓存服务器,是 Django 原生支持的最快、最高效的缓存类型
- 缓存也可以存储在数据库中
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', 'TIMEOUT': '60' * 5 #缓存过期时间 } }
我们在setting配置文件输入这几行代码,location就是我们的缓存数据库名
在使用这个my_cache_table缓存数据库之前,必须先创建缓存表
python manage.py createcachetable
在terminal数据上面这个
然后可以写一个这样的代码验证一下
def news(request): result = cache.get('news') print(result) #如果cache中有缓存数据,则直接返回 if result: return HttpResponse(result) else: news_list = [] for i in range(10): news_list.append('你好你好%d' % i) sleep(5) data = { 'news_list': news_list } response = render(request,'news.html',context=data) #如果cache中没有缓存数据,则存数据 cache.set('news',response.content,timeout=60) return response
我们把
cache命名为
news,当我们进入这个执行这个方法时,先判断
result是否存在,如果存在则说明
cache存在,如果不存在,就把数据存入到
news.html中,然后把页面的
content设置为
cache
如果我们有一个高效的数据库,我们就可以这样做,但是一般情况下,普通数据库并没有办法有效地应对真实情景才会出现的一些服务器崩溃之类的问题,如果我们服务器突然崩溃了,那这些缓存肯定就没了
所以我们需要一个高效的缓存数据库来提升服务器性能
Redis的使用:
其实redis在使用上跟普通数据库是差不多的,毕竟都是数据库,但是在使用redis之前我们还需要下载redis
https://www.cnblogs.com/xing-nb/p/12146449.html
这个地址完美地讲述了如何安装和使用redis,并提供了网盘法下载redis(我在github下载了好久下载不了…)
安装启动好之后,就开始配置啦
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379', #缓存位置 'OPTION': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', #客户端类 } } }
记得要启动redis服务,配置好之后,测试代码跟上面的一样,不用改动
使用双数据库缓存机制:
我们还可以使用多缓存机制来继续提高运行效率:
首先在settings.py页面添加如下代码:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'cache_table', #缓存位置 'TIMEOUT': 60 }, 'redis_backend': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379', #缓存位置 'OPTION': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', #客户端类 } } }
第一个
default是普通数据库缓存,第二个
redis_backends是redis数据库缓存
#@cache_page(60, cache='redis_backend') def renews(request): cache = caches['redis_backend'] result = cache.get('renew') if result: return HttpResponse(result) renews_list = [] for i in range(10): renews_list.append('halouhalou%d' % i) sleep(5) data = { 'renews_list': renews_list } response = render(request, 'renew.html', context=data) cache.set('renew', response.content, timeout=60) return response
这个代码的意思是既可以使用装饰器的方式,也可以使用
cache = caches['redis_backend']的方式
- 详解JavaEE 使用 Redis 数据库进行内容缓存和高访问负载
- django 使用redis做缓存处理的基本操作
- Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库
- Django使用Redis进行缓存详细最全流程
- django - 使用 redis 实现缓存
- Django使用Redis进行缓存详细最全流程
- Django使用redis实现缓存(django-redis)
- Redis 缓存数据库使用心得
- redis之django-redis的简单缓存使用
- JAVA中使用redis+protoStuff实现数据库缓存机制
- 使用Redis和Java进行数据库缓存
- django使用redis做缓存(非django-redis模块)
- 在 Django 中使用 Redis 做缓存
- Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库
- 使用redis作为缓存,数据还需要存入数据库中吗?
- JavaEE 使用 Redis 数据库进行内容缓存和高访问负载
- springboot项目使用redis数据库作缓存
- IT 缓存框架:足迹第二十三步ehcache、memcache、redis数据库的使用(什么是大项目常用的缓存处理方案)
- django使用redis实现缓存
- Django中使用Redis做缓存的配置